{
  "openapi": "3.1.0",
  "info": {
    "title": "Turboslide agent API",
    "version": "0.1.0",
    "description": "Every operation is a named action in one action table (SPEC 7.1). A designer’s click and an agent’s call take the same path through the same validator with the same baseRevision. Every mutating action requires baseRevision and rejects a stale one with 409 and the current document; every write returns the normalized result so the re-read is free."
  },
  "servers": [
    {
      "url": "http://localhost:4321",
      "description": "The studio dev server (always port 4321)"
    }
  ],
  "security": [
    {
      "bearer": []
    },
    {}
  ],
  "tags": [
    {
      "name": "discovery"
    },
    {
      "name": "deck"
    },
    {
      "name": "slide"
    },
    {
      "name": "block"
    },
    {
      "name": "asset"
    },
    {
      "name": "render"
    },
    {
      "name": "lint"
    },
    {
      "name": "version"
    },
    {
      "name": "export"
    },
    {
      "name": "view"
    }
  ],
  "paths": {
    "/api/agent": {
      "get": {
        "operationId": "agent.manifest",
        "summary": "The agent manifest: transports, execution rules, actions, what this instance implements, skills and resources",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "The manifest",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/{id}": {
      "get": {
        "operationId": "agent.describeAction",
        "summary": "The contract of one action and whether this instance implements it",
        "tags": [
          "discovery"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "An action id from the table, such as slide.update"
          }
        ],
        "responses": {
          "200": {
            "description": "id, label, doc, group, mutates, transports, milestone, implemented, input and output JSON Schema, cli, mcp, example",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown action, or one not offered on http",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/mcp": {
      "post": {
        "operationId": "mcp.rpc",
        "summary": "MCP over streamable HTTP: JSON-RPC requests (initialize first)",
        "description": "Tools deck_<action> for every implemented action on the mcp transport, the deck:// resources and the deck_review prompt; the mcp-session-id header carries the session; ?deck= and x-turboslide-author bind the session at initialize; deck_goto_slide is listed while a studio page is attached.",
        "tags": [
          "discovery"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A JSON-RPC response, as JSON or as an SSE stream"
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "mcp.stream",
        "summary": "The server to client notification stream of an MCP session",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "text/event-stream"
          }
        }
      },
      "delete": {
        "operationId": "mcp.close",
        "summary": "Ends an MCP session",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "Closed"
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "agent.openapi",
        "summary": "This document",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "OpenAPI 3.1",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "operationId": "agent.llms",
        "summary": "The short machine guide",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "Plain text",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.info": {
      "post": {
        "operationId": "deck.info",
        "summary": "Deck info",
        "description": "Title, theme, sections with slide ids and titles, counts (the canvas slides, charts and guides included) and the current revision.",
        "tags": [
          "deck"
        ],
        "x-mutates": false,
        "x-milestone": "M1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckInfoInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckInfoOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.create": {
      "post": {
        "operationId": "deck.create",
        "summary": "New deck",
        "description": "Creates a deck under decks/ from a template of the index (template.list), the deployment default when `from` is absent (Blank: one title slide in the Simple theme, light), and returns its id, revision and counts.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "M4",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckCreateInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckCreateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M4 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.rename": {
      "post": {
        "operationId": "deck.rename",
        "summary": "Rename deck",
        "description": "Sets the deck title, the name the sidebar head, the toolbar and the deck list show; one deck.set of /title.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "M4",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckRenameInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckRenameOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M4 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.set": {
      "post": {
        "operationId": "deck.set",
        "summary": "Set a deck field",
        "description": "Writes one field of the deck manifest by JSON pointer (/title, /theme, /defaults/appearance, /defaults/counter, /defaults/notes) as one deck.set mutation, the write the Theme panel and Slide numbers make; an absent value removes the field. /theme takes an id of theme.list (gt-ink-paper is stored as general-translation).",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckSetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckSetOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.list": {
      "post": {
        "operationId": "deck.list",
        "summary": "List decks",
        "description": "The manifest facts of every deck under decks/ (id, title, slide and section counts, revision, the stamps), newest first; decks in the trash are left out unless asked.",
        "tags": [
          "deck"
        ],
        "x-mutates": false,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckListInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.copy": {
      "post": {
        "operationId": "deck.copy",
        "summary": "Make a copy",
        "description": "Copies a deck under a new id with a new title, every slide or the named ones, with or without the speaker notes, at revision 0 with an empty version log; the output names the new deck.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckCopyInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckCopyOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.trash": {
      "post": {
        "operationId": "deck.trash",
        "summary": "Move to trash",
        "description": "Moves a deck to the trash by writing trashedAt on its manifest: the home page, the fresh presentation route and deck.list leave it out until deck.restore clears the stamp or deck.remove deletes it; nothing else changes.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckTrashInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckTrashOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.restore": {
      "post": {
        "operationId": "deck.restore",
        "summary": "Restore from trash",
        "description": "Clears trashedAt on a deck in the trash, so the home page and deck.list show it again.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckRestoreInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckTrashOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.remove": {
      "post": {
        "operationId": "deck.remove",
        "summary": "Delete forever",
        "description": "Deletes a deck: the folder under decks/ or the prefix in the Blob store, with its slides, assets and version log. Irreversible; the Trash page calls it, and `confirm` must be true.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckRemoveInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckRemoveOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.setBackground": {
      "post": {
        "operationId": "deck.setBackground",
        "summary": "Set theme background",
        "description": "Writes the background colour every slide without its own takes, what Add to theme writes; null removes it.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckSetBackgroundInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckSetBackgroundOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.guides": {
      "post": {
        "operationId": "deck.guides",
        "summary": "Set guides",
        "description": "Adds, removes, moves, sets or clears the deck’s guide lines, sheet pixels the same on every slide; the result is sorted and inside the sheet, and an empty result removes the field.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckGuidesInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckGuidesOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/template.list": {
      "post": {
        "operationId": "template.list",
        "summary": "Templates",
        "description": "The template index: every template with its name, category, cover, sentence, slide count, theme and appearance, the organisation flag of a template saved on this deployment and its brand kit, plus the id of the template new presentations start from.",
        "tags": [
          "deck"
        ],
        "x-mutates": false,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckInfoInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/template.slides": {
      "post": {
        "operationId": "template.slides",
        "summary": "Template slides",
        "description": "The slides of one template in order with their titles and kinds, the rows the gallery and Import slides read.",
        "tags": [
          "deck"
        ],
        "x-mutates": false,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateSlidesInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateSlidesOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/template.create": {
      "post": {
        "operationId": "template.create",
        "summary": "Save as template",
        "description": "Saves a deck as a template of this deployment: decks/templates/<slug of the name> with the deck manifest, its slides, its assets and its brand kit, listed under Your organisation in the gallery; a name an organisation template already carries replaces that template and keeps its slug (the dialog says so first).",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateCreateInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateCreateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/template.update": {
      "post": {
        "operationId": "template.update",
        "summary": "Replace a template",
        "description": "Replaces the slides, assets and brand kit of an organisation template from a deck and keeps its id, name and sentence; the templates Turboslide ships are refused.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateUpdateInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateCreateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/template.rename": {
      "post": {
        "operationId": "template.rename",
        "summary": "Rename a template",
        "description": "Renames an organisation template; its id and its folder stay, so every link and every default record still name it. The templates Turboslide ships are refused.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateRenameInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateCreateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/template.delete": {
      "post": {
        "operationId": "template.delete",
        "summary": "Delete a template",
        "description": "Deletes an organisation template folder and its index row; presentations made from it are not changed. The template new presentations start from is refused until another is chosen, and so are the templates Turboslide ships. Irreversible; `confirm` must be true.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateDeleteInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateDeleteOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/template.setDefault": {
      "post": {
        "operationId": "template.setDefault",
        "summary": "Use for new presentations",
        "description": "Makes a template the one /new and the Blank card start from on this deployment (decks/templates/default.json), whose name, logo and appearance every Reset and every default logo read; `blank` restores the blank deck Turboslide ships. An agent token needs the admin scope.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateSetDefaultInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateSetDefaultOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.list": {
      "post": {
        "operationId": "slide.list",
        "summary": "List slides",
        "description": "Every slide in deck order with its number, section, title, kind and lint counts.",
        "tags": [
          "slide"
        ],
        "x-mutates": false,
        "x-milestone": "M1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideListInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.get": {
      "post": {
        "operationId": "slide.get",
        "summary": "Get slide",
        "description": "The normalized slide, the assets it references and its last render record.",
        "tags": [
          "slide"
        ],
        "x-mutates": false,
        "x-milestone": "M1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideGetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideGetOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.insert": {
      "post": {
        "operationId": "slide.insert",
        "summary": "Insert slide",
        "description": "Inserts a slide into a section after the named slide, or first.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideInsertInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideInsertOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.remove": {
      "post": {
        "operationId": "slide.remove",
        "summary": "Remove slide",
        "description": "Removes a slide from the deck and its section.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideRemoveInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideRemoveOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.move": {
      "post": {
        "operationId": "slide.move",
        "summary": "Move slide",
        "description": "Moves a slide to a section after the named slide, or first.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideMoveInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideMoveOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.update": {
      "post": {
        "operationId": "slide.update",
        "summary": "Patch slide",
        "description": "Applies a mutation list to one slide and returns the normalized slide with its findings.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideUpdateInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.replace": {
      "post": {
        "operationId": "slide.replace",
        "summary": "Replace slide",
        "description": "Replaces a slide with the given document; what the source drawer’s Apply emits.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideReplaceInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.setLayout": {
      "post": {
        "operationId": "slide.setLayout",
        "summary": "Set layout",
        "description": "Moves a content slide to another layout and refiles its blocks: to freeform the slide converts to the canvas, every block getting the position box it is drawn at (measured); from freeform the boxes are dropped and the blocks fall into the target slots by geometry (docs/freeform.md).",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "M6",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideSetLayoutInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M6 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.new": {
      "post": {
        "operationId": "slide.new",
        "summary": "New slide",
        "description": "Inserts one slide made from a layout with empty placeholders after the named slide (or first in the section), as one slide.insert with template set; a Section header starts a new section that takes the slides after the anchor.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideNewInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideNewOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.duplicate": {
      "post": {
        "operationId": "slide.duplicate",
        "summary": "Duplicate slide",
        "description": "Copies the named slides with fresh ids after the last of them, in one write; a copied section header starts a new section.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideDuplicateInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideDuplicateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.skip": {
      "post": {
        "operationId": "slide.skip",
        "summary": "Skip slide",
        "description": "Sets or clears skip on the named slides in one write: a skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideSkipInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideSkipOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.applyLayout": {
      "post": {
        "operationId": "slide.applyLayout",
        "summary": "Apply layout",
        "description": "Applies a layout to the named slides in one write, one slide.replace per slide: the title, the body, the lists, the tables and the pictures move into the matching placeholders and the rest is appended; only a Title slide or a Main point drops what does not fit, and the output names the dropped blocks.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideApplyLayoutInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideApplyLayoutOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.import": {
      "post": {
        "operationId": "slide.import",
        "summary": "Import slides",
        "description": "Copies slides from another deck after the named slide in one write: the assets they use are copied into this deck, colliding slide ids are renamed, and the output lists the slides and the assets that came over.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideImportInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideImportOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.toCanvas": {
      "post": {
        "operationId": "slide.toCanvas",
        "summary": "Arrange by hand",
        "description": "Converts slides to the canvas, the freeform layout, every object taking the position box it is drawn at (measured on a rendered sheet); a slide already on the freeform layout is left as it is; one write, one browser page for the call.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideToCanvasInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideToCanvasOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.setBackground": {
      "post": {
        "operationId": "slide.setBackground",
        "summary": "Change background",
        "description": "Writes the background colour of slides in one write; null removes it and the theme default applies. A background picture is a picture object at the bottom of the stack.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideSetBackgroundInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideSetBackgroundOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/text.replaceAll": {
      "post": {
        "operationId": "text.replaceAll",
        "summary": "Find and replace",
        "description": "Replaces every occurrence of a string in the visible text of the deck (every Text of every block, the title slide fields, the table cells and the speaker notes) in one write, case insensitive unless asked; the output counts the replacements.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TextReplaceAllInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TextReplaceAllOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.set": {
      "post": {
        "operationId": "block.set",
        "summary": "Set block property",
        "description": "Writes one property of a block by JSON pointer; an absent value deletes it.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockSetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.insert": {
      "post": {
        "operationId": "block.insert",
        "summary": "Insert block",
        "description": "Inserts a block into a slot after the named block, or first; a block carrying pos on a slide that is not a canvas yet converts the slide first and lands as an object.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockInsertInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.remove": {
      "post": {
        "operationId": "block.remove",
        "summary": "Remove block",
        "description": "Removes a block from its slide.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockRemoveInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.move": {
      "post": {
        "operationId": "block.move",
        "summary": "Move block",
        "description": "Moves a block to a slot after the named block, or first.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockMoveInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.align": {
      "post": {
        "operationId": "block.align",
        "summary": "Align blocks",
        "description": "Aligns objects on one edge, against the selection for several, the slide for one, or the content box; against the selection the shared edge is the extreme object's own edge unless snap is true, and the slide's and the content box's edges stay exact; a slide that is not a canvas yet converts first (docs/FOCUS.md rank 14).",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "M6",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockAlignInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M6 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.distribute": {
      "post": {
        "operationId": "block.distribute",
        "summary": "Distribute blocks",
        "description": "Spreads freeform blocks along one axis with equal gaps between the first and the last, or with a fixed gap; with snap the moved edges round to the 8 px grid.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "M6",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockDistributeInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M6 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.order": {
      "post": {
        "operationId": "block.order",
        "summary": "Order block",
        "description": "Moves a freeform block through the stacking order, to the front or back or by one step, or to a given z rank, and renumbers the stack densely.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "M6",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockOrderInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M6 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.duplicate": {
      "post": {
        "operationId": "block.duplicate",
        "summary": "Duplicate block",
        "description": "Copies the named blocks of a slide with fresh ids, each after its original; a positioned copy sits 16 px right and down and on top of the stack, a copied group takes a fresh tag and copied connectors keep their attachments to copied targets.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockDuplicateInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlockDuplicateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.group": {
      "post": {
        "operationId": "block.group",
        "summary": "Group",
        "description": "Writes one group tag on two or more objects of a slide in one write; the tag is generated when none is given; a slide that is not a canvas yet converts first.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockGroupInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlockGroupOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.ungroup": {
      "post": {
        "operationId": "block.ungroup",
        "summary": "Ungroup",
        "description": "Removes the group tag from the named objects, or from every member of a named group, in one write.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockUngroupInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.regroup": {
      "post": {
        "operationId": "block.regroup",
        "summary": "Regroup",
        "description": "Writes a tag back on the named objects, the set the editor remembers from the last ungroup.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockRegroupInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlockRegroupOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.rotate": {
      "post": {
        "operationId": "block.rotate",
        "summary": "Rotate",
        "description": "Rotates objects to an angle or by an angle, degrees clockwise normalized to 0 up to 360, about each box or about the selection (a group rotation moves the members around the union centre); attached connectors follow; a slide that is not a canvas yet converts first.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockRotateInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.flip": {
      "post": {
        "operationId": "block.flip",
        "summary": "Flip",
        "description": "Toggles one flip axis on objects; about the selection every member also mirrors about the union centre and its angle becomes 360 minus itself (a group flip); attached connectors follow.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockFlipInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.crop": {
      "post": {
        "operationId": "block.crop",
        "summary": "Crop image",
        "description": "Writes the crop of a picture as fractions of it trimmed from each side; a slide that is not a canvas yet converts first when the picture is positioned.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockCropInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.mask": {
      "post": {
        "operationId": "block.mask",
        "summary": "Mask image",
        "description": "Clips a picture to a closed shape preset, or removes the mask with null.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockMaskInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.resetImage": {
      "post": {
        "operationId": "block.resetImage",
        "summary": "Reset image",
        "description": "Removes the crop, the mask, the adjustments and the round one crop anchor and aspect of a picture in one write.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockResetImageInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.adjust": {
      "post": {
        "operationId": "block.adjust",
        "summary": "Adjustments",
        "description": "Writes a picture’s transparency (0 to 1), brightness and contrast (-1 to 1); null clears one.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockAdjustInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.setAlt": {
      "post": {
        "operationId": "block.setAlt",
        "summary": "Alt text",
        "description": "Writes the description of an object: on the block for a shape, chart, line or text box, on the asset for a block that shows a picture, so two pictures of one asset share one description; the output names where it went.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockSetAltInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlockSetAltOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.shadow": {
      "post": {
        "operationId": "block.shadow",
        "summary": "Drop shadow",
        "description": "Writes or removes the drop shadow of objects: colour, opacity, angle, distance and blur, the absent ones at their defaults.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockShadowInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/block.autofit": {
      "post": {
        "operationId": "block.autofit",
        "summary": "Text fitting",
        "description": "Writes the fitting mode of a text carrying block: Do not autofit, Shrink text on overflow or Resize shape to fit text (grow, positioned blocks only); with apply the fit is measured and written in the same write, and the output names the fields written.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlockAutofitInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlockAutofitOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/text.style": {
      "post": {
        "operationId": "text.style",
        "summary": "Text style",
        "description": "Marks a range of a Text italic, underlined, struck, superscript or subscript, gives it a text or highlight colour, or a size in pixels (true sets, false clears, null clears a colour or the size), as one text.replace of the whole Text; the output returns the new markup.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TextStyleInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TextStyleOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/text.list": {
      "post": {
        "operationId": "text.list",
        "summary": "List options",
        "description": "Writes the marker, the preset and the items’ levels of a list block (a paragraph or text box converts to a list first); levels run 1 to 9.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TextListInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/text.spacing": {
      "post": {
        "operationId": "text.spacing",
        "summary": "Line and paragraph spacing",
        "description": "Writes the line spacing (a factor) and the space before and after paragraphs (px) of text blocks; null clears one.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TextSpacingInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/text.columns": {
      "post": {
        "operationId": "text.columns",
        "summary": "Columns",
        "description": "Writes the column count of text blocks, 1 to 3.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TextColumnsInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/text.indent": {
      "post": {
        "operationId": "text.indent",
        "summary": "Indent",
        "description": "Steps the left indent of text blocks by 64 px in or out, or writes it; on a list block with items the items’ levels step instead.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TextIndentInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/text.case": {
      "post": {
        "operationId": "text.case",
        "summary": "Capitalization",
        "description": "Rewrites the characters of a range in lowercase, UPPERCASE or Title Case, marks and links kept, as one text.replace.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TextCaseInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TextCaseOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/text.insert": {
      "post": {
        "operationId": "text.insert",
        "summary": "Insert text",
        "description": "Inserts a string at a plain text offset of a Text, the special characters picker’s write, as one text.replace at [at, at].",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TextInsertInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TextInsertOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/chart.setData": {
      "post": {
        "operationId": "chart.setData",
        "summary": "Edit chart data",
        "description": "Writes a chart’s categories and series in one write; every series carries one value per category.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChartSetDataInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/chart.setKind": {
      "post": {
        "operationId": "chart.setKind",
        "summary": "Chart type",
        "description": "Writes a chart’s kind; a pie keeps the first series and the output names the dropped ones.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChartSetKindInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChartSetKindOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/table.merge": {
      "post": {
        "operationId": "table.merge",
        "summary": "Merge cells",
        "description": "Merges the cells from one corner to another into the anchor; the covered cells’ texts join the anchor’s with a line break.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TableMergeInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/table.unmerge": {
      "post": {
        "operationId": "table.unmerge",
        "summary": "Unmerge cells",
        "description": "Removes the merge that covers a cell.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TableUnmergeInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/table.insertRows": {
      "post": {
        "operationId": "table.insertRows",
        "summary": "Insert rows",
        "description": "Inserts rows above or below a row, merges and cell styles shifted, in one write.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TableInsertRowsInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/table.insertColumns": {
      "post": {
        "operationId": "table.insertColumns",
        "summary": "Insert columns",
        "description": "Inserts columns left or right of a column, every row gaining empty cells, merges and cell styles shifted, in one write.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TableInsertColumnsInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/table.deleteRows": {
      "post": {
        "operationId": "table.deleteRows",
        "summary": "Delete rows",
        "description": "Deletes the rows from one index to another; deleting every row removes the table.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TableDeleteRowsInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/table.deleteColumns": {
      "post": {
        "operationId": "table.deleteColumns",
        "summary": "Delete columns",
        "description": "Deletes the columns from one index to another; deleting every column removes the table.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TableDeleteColumnsInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/table.distribute": {
      "post": {
        "operationId": "table.distribute",
        "summary": "Distribute rows or columns",
        "description": "Gives every row an equal height or every column an equal width from a total; without a total the widths or heights clear so the content sizes them.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TableDistributeInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/table.cellStyle": {
      "post": {
        "operationId": "table.cellStyle",
        "summary": "Cell fill and border",
        "description": "Writes the fill and the border of cells in one write; null clears one; a border weight of 0 draws no border.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TableCellStyleInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/shape.set": {
      "post": {
        "operationId": "shape.set",
        "summary": "Shape",
        "description": "Writes the shape fields of shape blocks in one write: the preset, its adjust values, fill, border colour, weight, dash and corner radius; null clears one.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShapeSetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/line.set": {
      "post": {
        "operationId": "line.set",
        "summary": "Line",
        "description": "Writes the line fields of line blocks in one write: the kind, the start and end decorations, weight, dash, bend and points; a connect end attaches to a shape’s connection site and moves the end onto it, null detaches.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LineSetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideUpdateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/diagram.insert": {
      "post": {
        "operationId": "diagram.insert",
        "summary": "Insert diagram",
        "description": "Inserts a diagram template as one group of shape, text and line objects, centred on the sheet unless a box is given; a slide that is not a canvas yet converts first; the output names the ids.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "GS2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiagramInsertInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiagramInsertOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/section.set": {
      "post": {
        "operationId": "section.set",
        "summary": "Set sections",
        "description": "Replaces the section list, the only place slide order lives.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SectionSetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SectionSetOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.lease": {
      "post": {
        "operationId": "slide.lease",
        "summary": "Lease slide",
        "description": "Takes a lease on a slide for the author; another author’s write is rejected with 409 unless forced.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideLeaseInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Lease"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/asset.add": {
      "post": {
        "operationId": "asset.add",
        "summary": "Add asset",
        "description": "Adds a file, a data URL or a fetched URL as an asset with its role, alt, license fields and optional two-tone treatment; returns the asset with twins and metrics.",
        "tags": [
          "asset"
        ],
        "x-mutates": true,
        "x-milestone": "M5",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssetAddInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Asset"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (25 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M5 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/asset.dither": {
      "post": {
        "operationId": "asset.dither",
        "summary": "Dither asset",
        "description": "Re-runs the two-tone pipeline on an asset with new parameters and reports plate clearance; with fromRecorded it reads the committed twins back and verifies them cell for cell.",
        "tags": [
          "asset"
        ],
        "x-mutates": true,
        "x-milestone": "M5",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssetDitherInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetDitherOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M5 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/asset.capture": {
      "post": {
        "operationId": "asset.capture",
        "summary": "Capture page",
        "description": "Captures a page at 1440 by 900 in one or both themes through a per-site recipe, optionally cropped to a region, with identical-region 2x detail crops as further assets.",
        "tags": [
          "asset"
        ],
        "x-mutates": true,
        "x-milestone": "M5",
        "x-transports": [
          "cli",
          "mcp",
          "http"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssetCaptureInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Asset"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (25 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M5 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/material.capture": {
      "post": {
        "operationId": "material.capture",
        "summary": "Capture material",
        "description": "Renders a shader material at 3200 by 1800 and captures frozen frames at the given anchors as assets with recipe keys, through the two-tone screen when asked; one anchor returns the asset, several the list.",
        "tags": [
          "asset"
        ],
        "x-mutates": true,
        "x-milestone": "M5",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialCaptureInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialCaptureOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M5 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/material.list": {
      "post": {
        "operationId": "material.list",
        "summary": "List materials",
        "description": "The material catalog: every paper:* entry with its uniform schema and palette presets, and the proto:* engines with their availability.",
        "tags": [
          "asset"
        ],
        "x-mutates": false,
        "x-milestone": "M5",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialListInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M5 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/render.slide": {
      "post": {
        "operationId": "render.slide",
        "summary": "Render",
        "description": "Renders slides in one or both themes at 1x or 2x and returns render records with image paths.",
        "tags": [
          "render"
        ],
        "x-mutates": false,
        "x-milestone": "M1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenderSlideInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenderSlideOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/render.sheet": {
      "post": {
        "operationId": "render.sheet",
        "summary": "Contact sheet",
        "description": "Renders a contact sheet per theme with a JSON cell map from cell boxes to slide ids.",
        "tags": [
          "render"
        ],
        "x-mutates": false,
        "x-milestone": "M1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenderSheetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenderSheetOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/lint.run": {
      "post": {
        "operationId": "lint.run",
        "summary": "Lint",
        "description": "Runs the grammar linter on slides in the static, rendered or both layers and returns findings.",
        "tags": [
          "lint"
        ],
        "x-mutates": false,
        "x-milestone": "M1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LintRunInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LintRunOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/fix.run": {
      "post": {
        "operationId": "fix.run",
        "summary": "Fix",
        "description": "Applies the fix mutations of findings that carry one and reports what remains.",
        "tags": [
          "lint"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FixRunInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FixRunOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/diff.run": {
      "post": {
        "operationId": "diff.run",
        "summary": "Diff",
        "description": "The mutation list between two revisions in prose, optionally with before and after crops.",
        "tags": [
          "version"
        ],
        "x-mutates": false,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiffRunInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiffRunOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/version.save": {
      "post": {
        "operationId": "version.save",
        "summary": "Save version",
        "description": "Saves a named version at the current revision.",
        "tags": [
          "version"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VersionSaveInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Version"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/version.list": {
      "post": {
        "operationId": "version.list",
        "summary": "List versions",
        "description": "The saved versions with author, note and revision.",
        "tags": [
          "version"
        ],
        "x-mutates": false,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckInfoInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VersionListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/version.restore": {
      "post": {
        "operationId": "version.restore",
        "summary": "Restore version",
        "description": "Restores a version as a mutation, so it is undoable and visible in History.",
        "tags": [
          "version"
        ],
        "x-mutates": true,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VersionRestoreInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VersionRestoreOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/export.run": {
      "post": {
        "operationId": "export.run",
        "summary": "Export",
        "description": "Exports the deck to PPTX in flatten (perfect, pixel identical) or native (editable text) mode and returns the verified report.",
        "tags": [
          "export"
        ],
        "x-mutates": false,
        "x-milestone": "M2",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExportRunInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportReport"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M2 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/export.text": {
      "post": {
        "operationId": "export.text",
        "summary": "Download as plain text",
        "description": "The deck as plain text: one block of paragraphs per slide in order, table cells joined by tabs, a blank line between slides, the notes after each slide when asked; skipped slides left out unless asked.",
        "tags": [
          "export"
        ],
        "x-mutates": false,
        "x-milestone": "GS1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExportTextInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportTextOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/build.run": {
      "post": {
        "operationId": "build.run",
        "summary": "Build standalone",
        "description": "Writes the single-file HTML deck with fonts and assets inlined and asserts the size budget.",
        "tags": [
          "export"
        ],
        "x-mutates": false,
        "x-milestone": "M1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BuildRunInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BuildRunOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/validate.run": {
      "post": {
        "operationId": "validate.run",
        "summary": "Validate",
        "description": "Validates a deck directory and returns the issues and the normalized document.",
        "tags": [
          "deck"
        ],
        "x-mutates": false,
        "x-milestone": "M1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateRunInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidateRunOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in M1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.tailor": {
      "post": {
        "operationId": "deck.tailor",
        "summary": "Tailor for a customer",
        "description": "The tailoring pass as one write: replaces the customer name in every visible text and the notes, swaps the pictures whose alt text names the old customer for one asset, and skips the named slides; answers the counts per step and the slides that changed.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckTailorInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckTailorOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/assist.propose": {
      "post": {
        "operationId": "assist.propose",
        "summary": "Ask the assistant",
        "description": "Asks the assistant for a proposal over the named slides: a shorter rewrite or speaker notes, or a free ask that resolves to one of the two; answers signed cards a caller accepts with assist.accept. A read: nothing is written until a card is accepted.",
        "tags": [
          "deck"
        ],
        "x-mutates": false,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistProposeInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistProposeOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/assist.accept": {
      "post": {
        "operationId": "assist.accept",
        "summary": "Accept a proposal",
        "description": "Writes one card assist.propose returned, as one write by the assistant: the signature, the expiry and the deck are verified, a card behind the deck is re based when its blocks are unchanged and refused otherwise.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistAcceptInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistAcceptOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/brand.get": {
      "post": {
        "operationId": "brand.get",
        "summary": "Brand kit",
        "description": "The brand kit record of the deck: the colour roles, the faces, the logo and footer slots, the slide numbers, the frame toggles and the words that never translate, drawn over the deck’s theme; an empty object for a deck that draws its theme alone.",
        "tags": [
          "deck"
        ],
        "x-mutates": false,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckInfoInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BrandGetOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/brand.set": {
      "post": {
        "operationId": "brand.set",
        "summary": "Set a brand kit field",
        "description": "Writes one value of the brand kit by JSON pointer (/colors/light/primary, /fonts/display, /mark, /footer/logo, /footer/text, /counter/format, /frame/rails, /positions/mark, /lexicon, /appearance, /name) as one deck.set mutation under /brand, the write every Brand kit panel control makes; an absent value removes the field. The record is validated before the commit.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BrandSetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BrandSetOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/brand.reset": {
      "post": {
        "operationId": "brand.reset",
        "summary": "Reset the brand kit",
        "description": "Removes the brand kit record, so the deck draws its theme alone (theme.list), or one field of it when a pointer is given, which then reads the theme’s value; a deck with nothing to remove writes no revision.",
        "tags": [
          "deck"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BrandResetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BrandResetOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/font.list": {
      "post": {
        "operationId": "font.list",
        "summary": "Fonts",
        "description": "The font catalog: every face with the name PowerPoint uses, its category, weights, italic and licence (docs/archive/rounds/PRODUCT.md 4.2).",
        "tags": [
          "render"
        ],
        "x-mutates": false,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckInfoInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FontListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/logo.search": {
      "post": {
        "operationId": "logo.search",
        "summary": "Find a logo",
        "description": "Searches the cached index of thesvg.org’s brand marks by title, slug, alias and category, ranked prefix, then word start, then substring, brands before community; answers each mark’s variants, its licence as recorded with the seller’s sentence, its brand site and guidelines and whether its default reads on paper and on ink, with the index’s date and its last upstream failure.",
        "tags": [
          "asset"
        ],
        "x-mutates": false,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LogoSearchInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LogoSearchOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/logo.insert": {
      "post": {
        "operationId": "logo.insert",
        "summary": "Insert a logo",
        "description": "Stores a thesvg.org mark on the deck as an asset with the role logo, PNG twins at 3x of the logo size, the sanitized SVG as its source file and a source record naming the mark, its licence and its guidelines, never the source’s address; with slideId it places the picture at the logo size in the free area of the body slot, with blockId it swaps that picture’s asset and keeps the box, with everySlide or kit it writes the brand kit’s logo slots in the same write.",
        "tags": [
          "asset"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LogoInsertInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LogoInsertOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/logo.refresh": {
      "post": {
        "operationId": "logo.refresh",
        "summary": "Refresh the logo index",
        "description": "Rebuilds the cached logo index from thesvg.org’s manifest inside its time budget, marks the variants that answer 404 unavailable, drops the marks the source removed with their cached files and answers the counts; with dryRun it answers the counts, the index’s date, its last failure and its progress without an upstream fetch.",
        "tags": [
          "asset"
        ],
        "x-mutates": false,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LogoRefreshInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LogoRefreshOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/shader.list": {
      "post": {
        "operationId": "shader.list",
        "summary": "List shaders",
        "description": "The shader library in the gallery’s order: every entry with its category, its featured preset, its stills (the file names under packages/materials/previews), its uniform schema and its palette presets computed from this deck’s brand kit, plus the eleven common controls with their ranges and sentences and the five category chips; material.list is the alias without the gallery fields.",
        "tags": [
          "asset"
        ],
        "x-mutates": false,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShaderListInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShaderListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/shader.insert": {
      "post": {
        "operationId": "shader.insert",
        "summary": "Insert a shader",
        "description": "Lands a shader as an object on the named slide: the entry’s featured preset unless one is named (the diamond for liquid metal), the common controls with their resolved uniforms beside them, motion.play show, in the largest free rectangle of the body slot (or at the box named), selected in the editor; a slide that is not a canvas converts first.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShaderInsertInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShaderInsertOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/shader.set": {
      "post": {
        "operationId": "shader.set",
        "summary": "Set a shader field",
        "description": "One write on a shader block: /preset writes the preset and clears the control overrides and the uniforms; /controls or /controls/<name> writes the controls and their resolved uniforms together; any other pointer (/anchor, /motion, /uniforms, /twoTone, /plate) is one block.set. One history entry.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShaderSetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShaderSetOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/shader.frame": {
      "post": {
        "operationId": "shader.frame",
        "summary": "Store a shader frame",
        "description": "The client capture’s write (the editor’s own WebGL): stores the PNG under assets/frame-<16 hex of frameKey>@2x.png, writes the block’s /asset and removes the block’s superseded frame in one revision; the key is checked against the block as the document reads now, so a recipe that moved on answers 409; the same bytes under the same id store nothing. The orphan prune runs behind the response.",
        "tags": [
          "asset"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShaderFrameInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShaderFrameOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/shader.capture": {
      "post": {
        "operationId": "shader.capture",
        "summary": "Capture a shader’s frame",
        "description": "The hosted job for one shader block, the fallback when the editor has no WebGL and the agent’s route: the recipe rendered at the block’s box aspect with the long side 3200 in the capture browser, then the same write as shader.frame; bounded at 30 s hosted, answering one sentence.",
        "tags": [
          "asset"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShaderCaptureInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShaderCaptureOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/shader.render": {
      "post": {
        "operationId": "shader.render",
        "summary": "Render a shader",
        "description": "PNG bytes of a recipe for an agent or the CLI, no deck write and no browser of the caller’s: the material, a preset, uniforms or the common controls, the frame time and the pixels (3200 by 1800 unless a size with the long side 3200 is named); the deck’s brand kit colours the presets when the call names a deck.",
        "tags": [
          "render"
        ],
        "x-mutates": false,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShaderRenderInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShaderRenderOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/admin.avatar.sweep": {
      "post": {
        "operationId": "admin.avatar.sweep",
        "summary": "Sweep orphan pictures",
        "description": "Removes picture avatar files under u/ that no profile names and that are older than a day (an upload that never reached its record); by key, never by date or name; refused without an identity database.",
        "tags": [
          "admin"
        ],
        "x-mutates": true,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "http"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdminAvatarSweepInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminAvatarSweepOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/theme.list": {
      "post": {
        "operationId": "theme.list",
        "summary": "Themes",
        "description": "The theme library: each of the nine themes with its id, name, one sentence, the appearance a deck in it draws when none is chosen, and its twelve sheet tokens per appearance. deck.set /theme takes any of the ids; a brand kit draws over the theme.",
        "tags": [
          "deck"
        ],
        "x-mutates": false,
        "x-milestone": "P1",
        "x-transports": [
          "cli",
          "mcp",
          "http"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckInfoInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ThemeListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in P1 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/presence.list": {
      "post": {
        "operationId": "presence.list",
        "summary": "Collaborators",
        "description": "The roster of the deck’s room with the computed mark, slide, selection, pointer and follow target per participant; server side on the window transport.",
        "tags": [
          "presence"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckInfoInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresenceListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/presence.follow": {
      "post": {
        "operationId": "presence.follow",
        "summary": "Follow",
        "description": "The attached page follows a client’s slide and scroll; refused for viewers, commenters, anonymous people and agents with Go to slide offered instead.",
        "tags": [
          "presence"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PresenceFollowInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresenceFollowOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/presence.unfollow": {
      "post": {
        "operationId": "presence.unfollow",
        "summary": "Stop following",
        "description": "The attached page stops following.",
        "tags": [
          "presence"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckInfoInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresenceUnfollowOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/presence.pointer": {
      "post": {
        "operationId": "presence.pointer",
        "summary": "Live pointer",
        "description": "Turns the caller’s live pointer on or off, persisted on the principal record per deck.",
        "tags": [
          "presence"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PresencePointerInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresencePointerOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/sync.status": {
      "post": {
        "operationId": "sync.status",
        "summary": "Sync status",
        "description": "The client’s position in the room: the last stream entry, the revision, the pending and retained counts, the tier, the transport and whether the stream is connected.",
        "tags": [
          "sync"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckInfoInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyncStatusOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.watch": {
      "post": {
        "operationId": "deck.watch",
        "summary": "Watch",
        "description": "Long polls for the checkpoints and comment entries since a revision, the polling form for a transport without a stream; answers at once when something is newer, else at the timeout.",
        "tags": [
          "sync"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckWatchInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckWatchOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.add": {
      "post": {
        "operationId": "comment.add",
        "summary": "Comment",
        "description": "Starts a thread at an anchor (the deck, a slide, a block, a text range, a table cell or the notes) with a plain text body whose {@n} tokens name its mentions, optionally assigned; server side.",
        "tags": [
          "comment"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentAddInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentAddOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.reply": {
      "post": {
        "operationId": "comment.reply",
        "summary": "Reply",
        "description": "Appends a reply to a thread; server side.",
        "tags": [
          "comment"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentReplyInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentAddOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.edit": {
      "post": {
        "operationId": "comment.edit",
        "summary": "Edit comment",
        "description": "Rewrites a comment’s body, its author only; 409 with the current thread when the thread moved since expectedUpdatedAt.",
        "tags": [
          "comment"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentEditInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentAddOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.delete": {
      "post": {
        "operationId": "comment.delete",
        "summary": "Delete comment",
        "description": "Tombstones a comment, keeping its replies; the first comment’s tombstone keeps the thread; restore brings it back within 30 days.",
        "tags": [
          "comment"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentDeleteInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentAddOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.resolve": {
      "post": {
        "operationId": "comment.resolve",
        "summary": "Resolve",
        "description": "Marks a thread resolved; last writer wins.",
        "tags": [
          "comment"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentResolveInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentAddOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.reopen": {
      "post": {
        "operationId": "comment.reopen",
        "summary": "Re-open",
        "description": "Reopens a resolved thread; last writer wins.",
        "tags": [
          "comment"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentReopenInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentAddOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.assign": {
      "post": {
        "operationId": "comment.assign",
        "summary": "Assign",
        "description": "Assigns a thread to a principal or an invitation (an agent principal is assignable), or clears the assignment with null; last writer wins.",
        "tags": [
          "comment"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentAssignInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentAddOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.done": {
      "post": {
        "operationId": "comment.done",
        "summary": "Mark as done",
        "description": "The assignee marks the thread done; last writer wins.",
        "tags": [
          "comment"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentDoneInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentAddOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.react": {
      "post": {
        "operationId": "comment.react",
        "summary": "React",
        "description": "Toggles the caller’s reaction on a comment from the 24 emoji palette; reactions are a set per emoji keyed by principal.",
        "tags": [
          "comment"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentReactInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentAddOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.list": {
      "post": {
        "operationId": "comment.list",
        "summary": "Comments",
        "description": "The threads of the deck or a slide with their anchors resolved against the current document, filtered by block, state, assignment to the caller, author, search text or revision; 403 without readComments.",
        "tags": [
          "comment"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentListInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.get": {
      "post": {
        "operationId": "comment.get",
        "summary": "Comment thread",
        "description": "One thread with its anchor resolved against the current document.",
        "tags": [
          "comment"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentGetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentGetOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/comment.link": {
      "post": {
        "operationId": "comment.link",
        "summary": "Link to comment",
        "description": "The editor and the view URLs that open the deck on the thread’s slide with its card expanded; runs in the page on the window transport.",
        "tags": [
          "comment"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentLinkInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/notification.list": {
      "post": {
        "operationId": "notification.list",
        "summary": "Notifications",
        "description": "The caller’s inbox, newest first: mentions, replies, assignments, resolutions, reactions, access requests and grants, coalesced per thread inside a 15 minute window.",
        "tags": [
          "comment"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationListInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/notification.markRead": {
      "post": {
        "operationId": "notification.markRead",
        "summary": "Mark as read",
        "description": "Marks the named notifications read, or every one; answers the unread count.",
        "tags": [
          "comment"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationMarkReadInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationMarkReadOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/notification.settings": {
      "post": {
        "operationId": "notification.settings",
        "summary": "Notification settings",
        "description": "Reads or writes the caller’s per deck level (All comments, Comments for you, None), the email switch and, for the owner, whether commenters read the Activity panel; a read when every field is absent.",
        "tags": [
          "comment"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationSettingsInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationSettingsOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/activity.list": {
      "post": {
        "operationId": "activity.list",
        "summary": "Activity",
        "description": "The merged activity feed of the deck: version windows, comment events, share events, requests, role changes, renames, restores, named versions, exports, imports and trash; editors and the owner, commenters when allowed.",
        "tags": [
          "comment"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityListInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActivityListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/version.diff": {
      "post": {
        "operationId": "version.diff",
        "summary": "Show changes",
        "description": "The mutations between two revisions grouped by touched block and by author, the data behind Show changes; from omitted with staged is the last named version, to defaults to the current revision.",
        "tags": [
          "version"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VersionDiffInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VersionDiffOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.get": {
      "post": {
        "operationId": "share.get",
        "summary": "Sharing",
        "description": "The access record with its tokens hashed and the dead links of the last thirty days, plus the caller’s role, how it was reached and the capabilities it gives; a viewer receives the owner, the general access mode, their own grant and their capabilities only.",
        "tags": [
          "share"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareGetInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareGetOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.setGeneralAccess": {
      "post": {
        "operationId": "share.setGeneralAccess",
        "summary": "General access",
        "description": "Sets Restricted or Anyone with the link with its role; the link mode mints a token and answers its /s/ URL once.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareSetGeneralAccessInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareSetGeneralAccessOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.createLink": {
      "post": {
        "operationId": "share.createLink",
        "summary": "Create link",
        "description": "Mints a share link with a role, a label and an optional expiry and answers its /s/ URL once; several links with several roles may live at once.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareCreateLinkInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareCreateLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.revokeLink": {
      "post": {
        "operationId": "share.revokeLink",
        "summary": "Revoke link",
        "description": "Revokes one link; every session grant that names it dies on its next request.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareRevokeLinkInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.rotateLink": {
      "post": {
        "operationId": "share.rotateLink",
        "summary": "Rotate link",
        "description": "Mints a new token for a link and answers its URL once; the old token dies.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareRotateLinkInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareCreateLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.stop": {
      "post": {
        "operationId": "share.stop",
        "summary": "Stop sharing",
        "description": "Sets Restricted and revokes every link.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareStopInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.invite": {
      "post": {
        "operationId": "share.invite",
        "summary": "Share with people",
        "description": "Writes one grant per address with a role and an optional message and sends the invitations unless told not to; never says whether an account exists, and answers sent, queued or no-mail per address with the deck link for hand delivery.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareInviteInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareInviteOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.setRole": {
      "post": {
        "operationId": "share.setRole",
        "summary": "Change role",
        "description": "Changes a grant’s role; the owner’s row is refused.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareSetRoleInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.remove": {
      "post": {
        "operationId": "share.remove",
        "summary": "Remove access",
        "description": "Removes a grant; the caller may remove their own at any role.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareRemoveInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.setExpiry": {
      "post": {
        "operationId": "share.setExpiry",
        "summary": "Access expiry",
        "description": "Sets or clears a grant’s expiry, up to one year ahead.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareSetExpiryInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.settings": {
      "post": {
        "operationId": "share.settings",
        "summary": "Sharing settings",
        "description": "The gear’s five switches: editors can share, viewers can download, viewers can see comments, show names to people with the link, allow embedded HTML blocks; owner only, with a re-authentication within 10 minutes on the window transport.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareSettingsInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.requestAccess": {
      "post": {
        "operationId": "share.requestAccess",
        "summary": "Request access",
        "description": "Asks the owner for a role with an optional message; always answers the same sentence, so a caller learns nothing about whether the deck exists; rate limited per IP, and an anonymous caller must give an email.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareRequestAccessInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRequestAccessOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.listRequests": {
      "post": {
        "operationId": "share.listRequests",
        "summary": "Access requests",
        "description": "The pending requests with the requester’s label, email, role, message and time.",
        "tags": [
          "share"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareListRequestsInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareListRequestsOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.respond": {
      "post": {
        "operationId": "share.respond",
        "summary": "Respond to request",
        "description": "Approves a request as a role or declines it with null; the requester is told when asked.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareRespondInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.transferOwnership": {
      "post": {
        "operationId": "share.transferOwnership",
        "summary": "Transfer ownership",
        "description": "Offers the deck to a signed in principal or an email, who accepts or declines; owner only, anonymous targets refused.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareTransferOwnershipInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.acceptOwnership": {
      "post": {
        "operationId": "share.acceptOwnership",
        "summary": "Accept ownership",
        "description": "The pending owner takes the deck; the previous owner becomes an editor.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareAcceptOwnershipInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.declineOwnership": {
      "post": {
        "operationId": "share.declineOwnership",
        "summary": "Decline ownership",
        "description": "The pending owner declines the offer.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareDeclineOwnershipInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.claim": {
      "post": {
        "operationId": "share.claim",
        "summary": "Claim",
        "description": "A signed in principal claims an unowned deck (an admin any unowned deck); the deck then reads Anyone with the address can view, so every view link and the embed keep working while editing by address stops.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareClaimInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/share.emailCollaborators": {
      "post": {
        "operationId": "share.emailCollaborators",
        "summary": "Email collaborators",
        "description": "Sends a message to every collaborator or the named ones; declared this round and answers not implemented until round four.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareEmailCollaboratorsInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareEmailCollaboratorsOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.publish": {
      "post": {
        "operationId": "deck.publish",
        "summary": "Publish to the web",
        "description": "Mints the published player’s token and answers the player and embed URLs once; every edit is published, and the player never opens the editor.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckPublishInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeckPublishOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/deck.unpublish": {
      "post": {
        "operationId": "deck.unpublish",
        "summary": "Stop publishing",
        "description": "Revokes the published token; the player and the embed answer 410.",
        "tags": [
          "share"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckUnpublishInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/account.decks": {
      "post": {
        "operationId": "account.decks",
        "summary": "My presentations",
        "description": "The caller’s deck index with the owner and the caller’s role per row: owned, shared with me, recent, trash, or all for an admin; on a checkout every deck as owned.",
        "tags": [
          "account"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountDecksInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountDecksOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/account.tokens.create": {
      "post": {
        "operationId": "account.tokens.create",
        "summary": "Create API key",
        "description": "Mints an API key owned by the caller with a name, scopes and an optional expiry, shown once; never over MCP, and refused on a checkout, which has no accounts.",
        "tags": [
          "account"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "window",
          "cli",
          "http"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountTokensCreateInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountTokensCreateOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/account.tokens.list": {
      "post": {
        "operationId": "account.tokens.list",
        "summary": "API keys",
        "description": "The caller’s API keys without their secrets.",
        "tags": [
          "account"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckInfoInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountTokensListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/account.tokens.revoke": {
      "post": {
        "operationId": "account.tokens.revoke",
        "summary": "Revoke API key",
        "description": "Revokes one of the caller’s keys; its MCP sessions close.",
        "tags": [
          "account"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountTokensRevokeInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountTokensRevokeOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/account.me": {
      "post": {
        "operationId": "account.me",
        "summary": "Account",
        "description": "The caller’s principal, trust state, label, mark, avatar choice and sessions; the CLI can write the mark as a PNG.",
        "tags": [
          "account"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountMeInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountMeOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/account.setName": {
      "post": {
        "operationId": "account.setName",
        "summary": "Change name",
        "description": "Sets the display name under the rules of SPEC-3 0.19 (NFC, 1 to 40 code points with a letter or digit, no bidi controls, the reserved and confusable lists, unique per deck by skeleton); the refusal sentences are fixed.",
        "tags": [
          "account"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountSetNameInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountMeOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/account.setAvatar": {
      "post": {
        "operationId": "account.setAvatar",
        "summary": "Change avatar",
        "description": "Chooses the mark: initials, a glyph field, a dither plate, or a picture for signed in principals only.",
        "tags": [
          "account"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountSetAvatarInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountMeOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/account.sessions": {
      "post": {
        "operationId": "account.sessions",
        "summary": "Sessions",
        "description": "The caller’s sign in sessions, the current one marked.",
        "tags": [
          "account"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeckInfoInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountSessionsOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/account.signOut": {
      "post": {
        "operationId": "account.signOut",
        "summary": "Sign out",
        "description": "Ends one sign in session, or every other one with all.",
        "tags": [
          "account"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountSignOutInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountSignOutOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/admin.bootstrap": {
      "post": {
        "operationId": "admin.bootstrap",
        "summary": "Bootstrap admin",
        "description": "With the static bearer, gives an email the admin role and mints the first API key, shown once.",
        "tags": [
          "admin"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "http"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdminBootstrapInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminBootstrapOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/admin.assignOwner": {
      "post": {
        "operationId": "admin.assignOwner",
        "summary": "Assign owner",
        "description": "An admin sets a deck’s owner.",
        "tags": [
          "admin"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdminAssignOwnerInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareRevokeLinkOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/admin.flag": {
      "post": {
        "operationId": "admin.flag",
        "summary": "Kill switch",
        "description": "Reads or flips one of the kill switches (realtime, presence, comments, invites, email, exports, uploads, renderThumbs, materialize, htmlBlocks, signup, readOnly), read within 5 s by every instance.",
        "tags": [
          "admin"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdminFlagInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminFlagOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/admin.migrateStorage": {
      "post": {
        "operationId": "admin.migrateStorage",
        "summary": "Migrate storage",
        "description": "Runs one step of the storage layout v2 migration (plan, copy, verify, cutover, delete or rollback) from its cursor, in batches.",
        "tags": [
          "admin"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "http"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdminMigrateStorageInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminMigrateStorageOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/admin.mail.list": {
      "post": {
        "operationId": "admin.mail.list",
        "summary": "Captured mail",
        "description": "The mail captured under TURBOSLIDE_MAIL=capture, newest first; absent otherwise.",
        "tags": [
          "admin"
        ],
        "x-mutates": false,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "http"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdminMailListInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminMailListOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/picture.dither": {
      "post": {
        "operationId": "picture.dither",
        "summary": "Dither",
        "description": "Writes the deck’s two tone screen over a picture’s continuous source as a non destructive field, or removes it with null; a slide that is not a canvas converts first when the picture is positioned; answers the variant key, the metrics and any warnings.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PictureDitherInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PictureDitherOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/picture.materialize": {
      "post": {
        "operationId": "picture.materialize",
        "summary": "Materialize dithers",
        "description": "Writes the variant files and records of every dithered picture on the named slides, prunes the variants no picture references when asked, or names the missing variants without writing under dryRun; server side.",
        "tags": [
          "block"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PictureMaterializeInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PictureMaterializeOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.setBackgroundPicture": {
      "post": {
        "operationId": "slide.setBackgroundPicture",
        "summary": "Background picture",
        "description": "One write for a covering picture object at the back of each named slide with an optional dither, replacing the covering picture already there unless told not to; the file, url and upload forms run asset.add server side first.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideSetBackgroundPictureInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideSetBackgroundPictureOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/actions/slide.setBackgroundMaterial": {
      "post": {
        "operationId": "slide.setBackgroundMaterial",
        "summary": "Background material",
        "description": "Captures a shader material at an anchor and places the frozen frame as a covering picture object at the back of each named slide with an optional dither, in one call, or stores the frame the client sends with `frame` without a render; server side.",
        "tags": [
          "slide"
        ],
        "x-mutates": true,
        "x-milestone": "GS3",
        "x-transports": [
          "cli",
          "mcp",
          "http",
          "window"
        ],
        "parameters": [
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The deck id under decks/; the instance default (gt-brand) when absent"
          },
          {
            "name": "x-turboslide-author",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "human name or agent:<runId>; agent:http when absent (?author= is accepted too)"
          },
          {
            "name": "force",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Write to a slide another author leased (SPEC 6.7 force); x-turboslide-force: 1 is the header form"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SlideSetBackgroundMaterialInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The normalized result at the new revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlideSetBackgroundMaterialOutput"
                }
              }
            }
          },
          "400": {
            "description": "Malformed input (TypeError) with the Zod path; an unknown field carries code unknown_field and a JSON pointer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Bearer token required off localhost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id (RangeError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stale baseRevision or a held lease (ConflictError), with currentRevision, the current document and the holder",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over the cap (1 MB)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Renderer or codec failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "501": {
            "description": "Declared, lands in GS3 (NotImplementedError)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Deck": {
        "$id": "#/components/schemas/Deck",
        "type": "object",
        "properties": {
          "schemaVersion": {
            "type": "number",
            "const": 1
          },
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "title": "Title",
            "x-inspector": {
              "label": "Title",
              "control": "text",
              "group": "Slide"
            }
          },
          "theme": {
            "type": "string",
            "enum": [
              "simple",
              "general-translation",
              "swiss",
              "mint",
              "coral",
              "night",
              "slate",
              "sand",
              "signal",
              "gt-ink-paper"
            ],
            "title": "Theme",
            "x-inspector": {
              "label": "Theme",
              "control": "select",
              "snap": [
                "simple",
                "general-translation",
                "swiss",
                "mint",
                "coral",
                "night",
                "slate",
                "sand",
                "signal"
              ],
              "group": "Slide",
              "help": "One of the nine themes of theme.list; gt-ink-paper is read as general-translation."
            },
            "description": "One of the nine themes of theme.list; gt-ink-paper is read as general-translation."
          },
          "sections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Section"
            }
          },
          "assets": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "additionalProperties": {
              "$ref": "#/components/schemas/Asset"
            }
          },
          "defaults": {
            "type": "object",
            "properties": {
              "notes": {
                "type": "string"
              },
              "appearance": {
                "title": "Theme appearance",
                "x-inspector": {
                  "label": "Theme appearance",
                  "control": "select",
                  "snap": [
                    "light",
                    "dark"
                  ],
                  "group": "Slide",
                  "help": "Light or dark; every surface defaults to it. The theme’s default appearance when absent (theme.list)."
                },
                "description": "Light or dark; every surface defaults to it. The theme’s default appearance when absent (theme.list).",
                "type": "string",
                "enum": [
                  "light",
                  "dark"
                ]
              },
              "counter": {
                "title": "Slide numbers",
                "x-inspector": {
                  "label": "Slide numbers",
                  "control": "select",
                  "snap": [
                    "on",
                    "off",
                    "skip-title"
                  ],
                  "group": "Slide",
                  "help": "on draws the counter on every slide, off on none, skip-title on every slide but the title slide. On when absent."
                },
                "description": "on draws the counter on every slide, off on none, skip-title on every slide but the title slide. On when absent.",
                "type": "string",
                "enum": [
                  "on",
                  "off",
                  "skip-title"
                ]
              },
              "background": {
                "title": "Background",
                "x-inspector": {
                  "label": "Background",
                  "control": "json",
                  "group": "Slide",
                  "help": "The background colour every slide without its own takes; Add to theme writes it."
                },
                "description": "The background colour every slide without its own takes; Add to theme writes it.",
                "type": "object",
                "properties": {
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  }
                },
                "required": [
                  "color"
                ],
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          "guides": {
            "title": "Guides",
            "x-inspector": {
              "label": "Guides",
              "control": "json",
              "group": "Slide",
              "help": "Vertical (x) and horizontal (y) guide lines in sheet px, the same on every slide; drawn in the editor only."
            },
            "description": "Vertical (x) and horizontal (y) guide lines in sheet px, the same on every slide; drawn in the editor only.",
            "type": "object",
            "properties": {
              "x": {
                "type": "array",
                "items": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1600
                }
              },
              "y": {
                "type": "array",
                "items": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 900
                }
              }
            },
            "required": [
              "x",
              "y"
            ],
            "additionalProperties": false
          },
          "brand": {
            "title": "Brand kit",
            "x-inspector": {
              "label": "Brand kit",
              "control": "json",
              "group": "Slide",
              "help": "The colours, faces, logo, footer, slide numbers and frame of this presentation over its theme; the Theme panel and brand.set write it (docs/archive/rounds/PRODUCT.md 4.1). The theme alone when absent."
            },
            "description": "The colours, faces, logo, footer, slide numbers and frame of this presentation over its theme; the Theme panel and brand.set write it (docs/archive/rounds/PRODUCT.md 4.1). The theme alone when absent.",
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "appearance": {
                "type": "string",
                "enum": [
                  "light",
                  "dark"
                ]
              },
              "colors": {
                "type": "object",
                "properties": {
                  "light": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "background": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "caption": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "hint": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "primary": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "accent": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  },
                  "dark": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "background": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "caption": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "hint": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "primary": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "accent": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              "fonts": {
                "type": "object",
                "properties": {
                  "display": {
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  },
                  "text": {
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "mark": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "default",
                      "none",
                      "picture"
                    ]
                  },
                  "assetId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "box": {
                    "type": "object",
                    "properties": {
                      "w": {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 1600
                      },
                      "h": {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 900
                      }
                    },
                    "required": [
                      "w",
                      "h"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind"
                ],
                "additionalProperties": false
              },
              "footer": {
                "type": "object",
                "properties": {
                  "logo": {
                    "type": "string",
                    "enum": [
                      "default",
                      "none",
                      "picture"
                    ]
                  },
                  "assetId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "text": {
                    "type": "string",
                    "maxLength": 200
                  }
                },
                "additionalProperties": false
              },
              "counter": {
                "type": "object",
                "properties": {
                  "show": {
                    "type": "boolean"
                  },
                  "format": {
                    "type": "string",
                    "enum": [
                      "n / N",
                      "n",
                      "Slide n"
                    ]
                  },
                  "skipTitle": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "frame": {
                "type": "object",
                "properties": {
                  "rails": {
                    "type": "boolean"
                  },
                  "rules": {
                    "type": "boolean"
                  },
                  "crosses": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "positions": {
                "type": "object",
                "properties": {
                  "mark": {
                    "type": "string",
                    "enum": [
                      "top-left",
                      "top-right",
                      "bottom-left",
                      "bottom-right",
                      "hidden"
                    ]
                  },
                  "footerLogo": {
                    "type": "string",
                    "enum": [
                      "top-left",
                      "top-right",
                      "bottom-left",
                      "bottom-right",
                      "hidden"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "lexicon": {
                "maxItems": 200,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                }
              }
            },
            "additionalProperties": false
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "createdAt": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$"
          },
          "updatedAt": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$"
          },
          "trashedAt": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$"
          }
        },
        "required": [
          "schemaVersion",
          "id",
          "title",
          "theme",
          "sections",
          "assets",
          "revision",
          "createdAt",
          "updatedAt"
        ],
        "additionalProperties": false
      },
      "Section": {
        "$id": "#/components/schemas/Section",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "name": {
            "type": "string",
            "minLength": 1
          },
          "slideIds": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          }
        },
        "required": [
          "id",
          "name",
          "slideIds"
        ],
        "additionalProperties": false
      },
      "Slide": {
        "$id": "#/components/schemas/Slide",
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Slide"
                }
              },
              "title": {
                "title": "Title override",
                "x-inspector": {
                  "label": "Title override",
                  "control": "text",
                  "group": "Slide",
                  "help": "Replaces the derived title (first heading, big or plate title)."
                },
                "description": "Replaces the derived title (first heading, big or plate title).",
                "type": "string"
              },
              "notes": {
                "title": "Notes",
                "x-inspector": {
                  "label": "Notes",
                  "control": "textarea",
                  "group": "Slide"
                },
                "type": "string"
              },
              "tags": {
                "title": "Tags",
                "x-inspector": {
                  "label": "Tags",
                  "control": "json",
                  "group": "Slide"
                },
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "skip": {
                "title": "Skip slide",
                "x-inspector": {
                  "label": "Skip slide",
                  "control": "toggle",
                  "group": "Slide",
                  "help": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked."
                },
                "description": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked.",
                "type": "boolean",
                "const": true
              },
              "counter": {
                "title": "Slide number",
                "x-inspector": {
                  "label": "Slide number",
                  "control": "select",
                  "snap": [
                    "on",
                    "off"
                  ],
                  "group": "Slide",
                  "help": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected)."
                },
                "description": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected).",
                "type": "string",
                "enum": [
                  "on",
                  "off"
                ]
              },
              "template": {
                "title": "Layout",
                "x-inspector": {
                  "label": "Layout",
                  "control": "select",
                  "snap": [
                    "title",
                    "opener",
                    "split",
                    "cols",
                    "title-only",
                    "one-column",
                    "statement",
                    "section-description",
                    "mood",
                    "big-number",
                    "blank",
                    "subtitle-body",
                    "rows",
                    "plain",
                    "table",
                    "figure",
                    "pair",
                    "tiles",
                    "details",
                    "board",
                    "matrix",
                    "closing"
                  ],
                  "group": "Slide",
                  "help": "The layout the slide was made from; New slide and Apply layout write it."
                },
                "description": "The layout the slide was made from; New slide and Apply layout write it.",
                "type": "string",
                "enum": [
                  "title",
                  "opener",
                  "split",
                  "cols",
                  "title-only",
                  "one-column",
                  "statement",
                  "section-description",
                  "mood",
                  "big-number",
                  "blank",
                  "subtitle-body",
                  "rows",
                  "plain",
                  "table",
                  "figure",
                  "pair",
                  "tiles",
                  "details",
                  "board",
                  "matrix",
                  "closing"
                ]
              },
              "background": {
                "title": "Background",
                "x-inspector": {
                  "label": "Background",
                  "control": "json",
                  "group": "Slide",
                  "help": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack."
                },
                "description": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack.",
                "type": "object",
                "properties": {
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  }
                },
                "required": [
                  "color"
                ],
                "additionalProperties": false
              },
              "grammar": {
                "title": "Arranged from",
                "x-inspector": {
                  "label": "Arranged from",
                  "control": "readonly",
                  "group": "Slide",
                  "help": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it."
                },
                "description": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it.",
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "content",
                      "opener",
                      "mood",
                      "closing",
                      "title",
                      "statement"
                    ]
                  },
                  "layout": {
                    "$ref": "#/components/schemas/Layout"
                  },
                  "slots": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "enum": [
                        "main",
                        "head",
                        "headLeft",
                        "headRight",
                        "body",
                        "left",
                        "right",
                        "plate"
                      ]
                    },
                    "additionalProperties": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "boxes": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number",
                          "title": "X",
                          "x-inspector": {
                            "label": "X",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "y": {
                          "type": "number",
                          "title": "Y",
                          "x-inspector": {
                            "label": "Y",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "w": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Width",
                          "x-inspector": {
                            "label": "Width",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "h": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Height",
                          "x-inspector": {
                            "label": "Height",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "z": {
                          "title": "Z order",
                          "x-inspector": {
                            "label": "Z order",
                            "control": "number",
                            "group": "Layout",
                            "help": "Higher draws over lower; block.order moves a block through the stack."
                          },
                          "description": "Higher draws over lower; block.order moves a block through the stack.",
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "rotate": {
                          "title": "Rotate",
                          "x-inspector": {
                            "label": "Rotate",
                            "control": "number",
                            "snap": [
                              0,
                              15,
                              30,
                              45,
                              90,
                              180,
                              270
                            ],
                            "group": "Layout",
                            "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                          },
                          "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                          "type": "number",
                          "minimum": 0,
                          "exclusiveMaximum": 360
                        },
                        "flip": {
                          "title": "Flip",
                          "x-inspector": {
                            "label": "Flip",
                            "control": "select",
                            "snap": [
                              "h",
                              "v",
                              "hv"
                            ],
                            "group": "Layout",
                            "help": "h mirrors left to right, v top to bottom, hv both."
                          },
                          "description": "h mirrors left to right, v top to bottom, hv both.",
                          "type": "string",
                          "enum": [
                            "h",
                            "v",
                            "hv"
                          ]
                        },
                        "group": {
                          "title": "Group",
                          "x-inspector": {
                            "label": "Group",
                            "control": "readonly",
                            "group": "Layout",
                            "help": "The tag the members of one group share; Group and Ungroup write it."
                          },
                          "description": "The tag the members of one group share; Group and Ungroup write it.",
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "w",
                        "h"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "fields": {
                    "type": "object",
                    "properties": {
                      "mark": {
                        "type": "object",
                        "properties": {
                          "w": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          },
                          "h": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          }
                        },
                        "required": [
                          "w",
                          "h"
                        ],
                        "additionalProperties": false
                      },
                      "measure": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "picture": {
                        "$ref": "#/components/schemas/Picture"
                      },
                      "plate": {
                        "type": "object",
                        "properties": {
                          "side": {
                            "type": "string",
                            "enum": [
                              "lower-left",
                              "lower-right",
                              "upper-left"
                            ]
                          },
                          "maxWidth": {
                            "type": "number",
                            "enum": [
                              740,
                              560,
                              720
                            ]
                          }
                        },
                        "required": [
                          "side",
                          "maxWidth"
                        ],
                        "additionalProperties": false
                      },
                      "sectionId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "template": {
                        "type": "string",
                        "enum": [
                          "title",
                          "opener",
                          "split",
                          "cols",
                          "title-only",
                          "one-column",
                          "statement",
                          "section-description",
                          "mood",
                          "big-number",
                          "blank",
                          "subtitle-body",
                          "rows",
                          "plain",
                          "table",
                          "figure",
                          "pair",
                          "tiles",
                          "details",
                          "board",
                          "matrix",
                          "closing"
                        ]
                      },
                      "autofit": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind",
                  "boxes"
                ],
                "additionalProperties": false
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "kind": {
                "type": "string",
                "const": "content"
              },
              "layout": {
                "$ref": "#/components/schemas/Layout"
              },
              "slots": {
                "type": "object",
                "propertyNames": {
                  "type": "string",
                  "enum": [
                    "main",
                    "head",
                    "headLeft",
                    "headRight",
                    "body",
                    "left",
                    "right"
                  ]
                },
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Block"
                  }
                }
              }
            },
            "required": [
              "schemaVersion",
              "id",
              "kind",
              "layout",
              "slots"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Slide"
                }
              },
              "title": {
                "title": "Title override",
                "x-inspector": {
                  "label": "Title override",
                  "control": "text",
                  "group": "Slide",
                  "help": "Replaces the derived title (first heading, big or plate title)."
                },
                "description": "Replaces the derived title (first heading, big or plate title).",
                "type": "string"
              },
              "notes": {
                "title": "Notes",
                "x-inspector": {
                  "label": "Notes",
                  "control": "textarea",
                  "group": "Slide"
                },
                "type": "string"
              },
              "tags": {
                "title": "Tags",
                "x-inspector": {
                  "label": "Tags",
                  "control": "json",
                  "group": "Slide"
                },
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "skip": {
                "title": "Skip slide",
                "x-inspector": {
                  "label": "Skip slide",
                  "control": "toggle",
                  "group": "Slide",
                  "help": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked."
                },
                "description": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked.",
                "type": "boolean",
                "const": true
              },
              "counter": {
                "title": "Slide number",
                "x-inspector": {
                  "label": "Slide number",
                  "control": "select",
                  "snap": [
                    "on",
                    "off"
                  ],
                  "group": "Slide",
                  "help": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected)."
                },
                "description": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected).",
                "type": "string",
                "enum": [
                  "on",
                  "off"
                ]
              },
              "template": {
                "title": "Layout",
                "x-inspector": {
                  "label": "Layout",
                  "control": "select",
                  "snap": [
                    "title",
                    "opener",
                    "split",
                    "cols",
                    "title-only",
                    "one-column",
                    "statement",
                    "section-description",
                    "mood",
                    "big-number",
                    "blank",
                    "subtitle-body",
                    "rows",
                    "plain",
                    "table",
                    "figure",
                    "pair",
                    "tiles",
                    "details",
                    "board",
                    "matrix",
                    "closing"
                  ],
                  "group": "Slide",
                  "help": "The layout the slide was made from; New slide and Apply layout write it."
                },
                "description": "The layout the slide was made from; New slide and Apply layout write it.",
                "type": "string",
                "enum": [
                  "title",
                  "opener",
                  "split",
                  "cols",
                  "title-only",
                  "one-column",
                  "statement",
                  "section-description",
                  "mood",
                  "big-number",
                  "blank",
                  "subtitle-body",
                  "rows",
                  "plain",
                  "table",
                  "figure",
                  "pair",
                  "tiles",
                  "details",
                  "board",
                  "matrix",
                  "closing"
                ]
              },
              "background": {
                "title": "Background",
                "x-inspector": {
                  "label": "Background",
                  "control": "json",
                  "group": "Slide",
                  "help": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack."
                },
                "description": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack.",
                "type": "object",
                "properties": {
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  }
                },
                "required": [
                  "color"
                ],
                "additionalProperties": false
              },
              "grammar": {
                "title": "Arranged from",
                "x-inspector": {
                  "label": "Arranged from",
                  "control": "readonly",
                  "group": "Slide",
                  "help": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it."
                },
                "description": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it.",
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "content",
                      "opener",
                      "mood",
                      "closing",
                      "title",
                      "statement"
                    ]
                  },
                  "layout": {
                    "$ref": "#/components/schemas/Layout"
                  },
                  "slots": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "enum": [
                        "main",
                        "head",
                        "headLeft",
                        "headRight",
                        "body",
                        "left",
                        "right",
                        "plate"
                      ]
                    },
                    "additionalProperties": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "boxes": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number",
                          "title": "X",
                          "x-inspector": {
                            "label": "X",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "y": {
                          "type": "number",
                          "title": "Y",
                          "x-inspector": {
                            "label": "Y",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "w": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Width",
                          "x-inspector": {
                            "label": "Width",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "h": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Height",
                          "x-inspector": {
                            "label": "Height",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "z": {
                          "title": "Z order",
                          "x-inspector": {
                            "label": "Z order",
                            "control": "number",
                            "group": "Layout",
                            "help": "Higher draws over lower; block.order moves a block through the stack."
                          },
                          "description": "Higher draws over lower; block.order moves a block through the stack.",
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "rotate": {
                          "title": "Rotate",
                          "x-inspector": {
                            "label": "Rotate",
                            "control": "number",
                            "snap": [
                              0,
                              15,
                              30,
                              45,
                              90,
                              180,
                              270
                            ],
                            "group": "Layout",
                            "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                          },
                          "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                          "type": "number",
                          "minimum": 0,
                          "exclusiveMaximum": 360
                        },
                        "flip": {
                          "title": "Flip",
                          "x-inspector": {
                            "label": "Flip",
                            "control": "select",
                            "snap": [
                              "h",
                              "v",
                              "hv"
                            ],
                            "group": "Layout",
                            "help": "h mirrors left to right, v top to bottom, hv both."
                          },
                          "description": "h mirrors left to right, v top to bottom, hv both.",
                          "type": "string",
                          "enum": [
                            "h",
                            "v",
                            "hv"
                          ]
                        },
                        "group": {
                          "title": "Group",
                          "x-inspector": {
                            "label": "Group",
                            "control": "readonly",
                            "group": "Layout",
                            "help": "The tag the members of one group share; Group and Ungroup write it."
                          },
                          "description": "The tag the members of one group share; Group and Ungroup write it.",
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "w",
                        "h"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "fields": {
                    "type": "object",
                    "properties": {
                      "mark": {
                        "type": "object",
                        "properties": {
                          "w": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          },
                          "h": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          }
                        },
                        "required": [
                          "w",
                          "h"
                        ],
                        "additionalProperties": false
                      },
                      "measure": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "picture": {
                        "$ref": "#/components/schemas/Picture"
                      },
                      "plate": {
                        "type": "object",
                        "properties": {
                          "side": {
                            "type": "string",
                            "enum": [
                              "lower-left",
                              "lower-right",
                              "upper-left"
                            ]
                          },
                          "maxWidth": {
                            "type": "number",
                            "enum": [
                              740,
                              560,
                              720
                            ]
                          }
                        },
                        "required": [
                          "side",
                          "maxWidth"
                        ],
                        "additionalProperties": false
                      },
                      "sectionId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "template": {
                        "type": "string",
                        "enum": [
                          "title",
                          "opener",
                          "split",
                          "cols",
                          "title-only",
                          "one-column",
                          "statement",
                          "section-description",
                          "mood",
                          "big-number",
                          "blank",
                          "subtitle-body",
                          "rows",
                          "plain",
                          "table",
                          "figure",
                          "pair",
                          "tiles",
                          "details",
                          "board",
                          "matrix",
                          "closing"
                        ]
                      },
                      "autofit": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind",
                  "boxes"
                ],
                "additionalProperties": false
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "kind": {
                "type": "string",
                "const": "opener"
              },
              "sectionId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                "title": "Section",
                "x-inspector": {
                  "label": "Section",
                  "control": "select",
                  "group": "Slide"
                }
              },
              "picture": {
                "$ref": "#/components/schemas/Picture"
              },
              "plate": {
                "$ref": "#/components/schemas/Plate"
              }
            },
            "required": [
              "schemaVersion",
              "id",
              "kind",
              "sectionId",
              "picture",
              "plate"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Slide"
                }
              },
              "title": {
                "title": "Title override",
                "x-inspector": {
                  "label": "Title override",
                  "control": "text",
                  "group": "Slide",
                  "help": "Replaces the derived title (first heading, big or plate title)."
                },
                "description": "Replaces the derived title (first heading, big or plate title).",
                "type": "string"
              },
              "notes": {
                "title": "Notes",
                "x-inspector": {
                  "label": "Notes",
                  "control": "textarea",
                  "group": "Slide"
                },
                "type": "string"
              },
              "tags": {
                "title": "Tags",
                "x-inspector": {
                  "label": "Tags",
                  "control": "json",
                  "group": "Slide"
                },
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "skip": {
                "title": "Skip slide",
                "x-inspector": {
                  "label": "Skip slide",
                  "control": "toggle",
                  "group": "Slide",
                  "help": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked."
                },
                "description": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked.",
                "type": "boolean",
                "const": true
              },
              "counter": {
                "title": "Slide number",
                "x-inspector": {
                  "label": "Slide number",
                  "control": "select",
                  "snap": [
                    "on",
                    "off"
                  ],
                  "group": "Slide",
                  "help": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected)."
                },
                "description": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected).",
                "type": "string",
                "enum": [
                  "on",
                  "off"
                ]
              },
              "template": {
                "title": "Layout",
                "x-inspector": {
                  "label": "Layout",
                  "control": "select",
                  "snap": [
                    "title",
                    "opener",
                    "split",
                    "cols",
                    "title-only",
                    "one-column",
                    "statement",
                    "section-description",
                    "mood",
                    "big-number",
                    "blank",
                    "subtitle-body",
                    "rows",
                    "plain",
                    "table",
                    "figure",
                    "pair",
                    "tiles",
                    "details",
                    "board",
                    "matrix",
                    "closing"
                  ],
                  "group": "Slide",
                  "help": "The layout the slide was made from; New slide and Apply layout write it."
                },
                "description": "The layout the slide was made from; New slide and Apply layout write it.",
                "type": "string",
                "enum": [
                  "title",
                  "opener",
                  "split",
                  "cols",
                  "title-only",
                  "one-column",
                  "statement",
                  "section-description",
                  "mood",
                  "big-number",
                  "blank",
                  "subtitle-body",
                  "rows",
                  "plain",
                  "table",
                  "figure",
                  "pair",
                  "tiles",
                  "details",
                  "board",
                  "matrix",
                  "closing"
                ]
              },
              "background": {
                "title": "Background",
                "x-inspector": {
                  "label": "Background",
                  "control": "json",
                  "group": "Slide",
                  "help": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack."
                },
                "description": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack.",
                "type": "object",
                "properties": {
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  }
                },
                "required": [
                  "color"
                ],
                "additionalProperties": false
              },
              "grammar": {
                "title": "Arranged from",
                "x-inspector": {
                  "label": "Arranged from",
                  "control": "readonly",
                  "group": "Slide",
                  "help": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it."
                },
                "description": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it.",
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "content",
                      "opener",
                      "mood",
                      "closing",
                      "title",
                      "statement"
                    ]
                  },
                  "layout": {
                    "$ref": "#/components/schemas/Layout"
                  },
                  "slots": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "enum": [
                        "main",
                        "head",
                        "headLeft",
                        "headRight",
                        "body",
                        "left",
                        "right",
                        "plate"
                      ]
                    },
                    "additionalProperties": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "boxes": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number",
                          "title": "X",
                          "x-inspector": {
                            "label": "X",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "y": {
                          "type": "number",
                          "title": "Y",
                          "x-inspector": {
                            "label": "Y",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "w": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Width",
                          "x-inspector": {
                            "label": "Width",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "h": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Height",
                          "x-inspector": {
                            "label": "Height",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "z": {
                          "title": "Z order",
                          "x-inspector": {
                            "label": "Z order",
                            "control": "number",
                            "group": "Layout",
                            "help": "Higher draws over lower; block.order moves a block through the stack."
                          },
                          "description": "Higher draws over lower; block.order moves a block through the stack.",
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "rotate": {
                          "title": "Rotate",
                          "x-inspector": {
                            "label": "Rotate",
                            "control": "number",
                            "snap": [
                              0,
                              15,
                              30,
                              45,
                              90,
                              180,
                              270
                            ],
                            "group": "Layout",
                            "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                          },
                          "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                          "type": "number",
                          "minimum": 0,
                          "exclusiveMaximum": 360
                        },
                        "flip": {
                          "title": "Flip",
                          "x-inspector": {
                            "label": "Flip",
                            "control": "select",
                            "snap": [
                              "h",
                              "v",
                              "hv"
                            ],
                            "group": "Layout",
                            "help": "h mirrors left to right, v top to bottom, hv both."
                          },
                          "description": "h mirrors left to right, v top to bottom, hv both.",
                          "type": "string",
                          "enum": [
                            "h",
                            "v",
                            "hv"
                          ]
                        },
                        "group": {
                          "title": "Group",
                          "x-inspector": {
                            "label": "Group",
                            "control": "readonly",
                            "group": "Layout",
                            "help": "The tag the members of one group share; Group and Ungroup write it."
                          },
                          "description": "The tag the members of one group share; Group and Ungroup write it.",
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "w",
                        "h"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "fields": {
                    "type": "object",
                    "properties": {
                      "mark": {
                        "type": "object",
                        "properties": {
                          "w": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          },
                          "h": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          }
                        },
                        "required": [
                          "w",
                          "h"
                        ],
                        "additionalProperties": false
                      },
                      "measure": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "picture": {
                        "$ref": "#/components/schemas/Picture"
                      },
                      "plate": {
                        "type": "object",
                        "properties": {
                          "side": {
                            "type": "string",
                            "enum": [
                              "lower-left",
                              "lower-right",
                              "upper-left"
                            ]
                          },
                          "maxWidth": {
                            "type": "number",
                            "enum": [
                              740,
                              560,
                              720
                            ]
                          }
                        },
                        "required": [
                          "side",
                          "maxWidth"
                        ],
                        "additionalProperties": false
                      },
                      "sectionId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "template": {
                        "type": "string",
                        "enum": [
                          "title",
                          "opener",
                          "split",
                          "cols",
                          "title-only",
                          "one-column",
                          "statement",
                          "section-description",
                          "mood",
                          "big-number",
                          "blank",
                          "subtitle-body",
                          "rows",
                          "plain",
                          "table",
                          "figure",
                          "pair",
                          "tiles",
                          "details",
                          "board",
                          "matrix",
                          "closing"
                        ]
                      },
                      "autofit": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind",
                  "boxes"
                ],
                "additionalProperties": false
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "kind": {
                "type": "string",
                "const": "mood"
              },
              "picture": {
                "$ref": "#/components/schemas/Picture"
              },
              "plate": {
                "$ref": "#/components/schemas/Plate"
              }
            },
            "required": [
              "schemaVersion",
              "id",
              "kind",
              "picture",
              "plate"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Slide"
                }
              },
              "title": {
                "title": "Title override",
                "x-inspector": {
                  "label": "Title override",
                  "control": "text",
                  "group": "Slide",
                  "help": "Replaces the derived title (first heading, big or plate title)."
                },
                "description": "Replaces the derived title (first heading, big or plate title).",
                "type": "string"
              },
              "notes": {
                "title": "Notes",
                "x-inspector": {
                  "label": "Notes",
                  "control": "textarea",
                  "group": "Slide"
                },
                "type": "string"
              },
              "tags": {
                "title": "Tags",
                "x-inspector": {
                  "label": "Tags",
                  "control": "json",
                  "group": "Slide"
                },
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "skip": {
                "title": "Skip slide",
                "x-inspector": {
                  "label": "Skip slide",
                  "control": "toggle",
                  "group": "Slide",
                  "help": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked."
                },
                "description": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked.",
                "type": "boolean",
                "const": true
              },
              "counter": {
                "title": "Slide number",
                "x-inspector": {
                  "label": "Slide number",
                  "control": "select",
                  "snap": [
                    "on",
                    "off"
                  ],
                  "group": "Slide",
                  "help": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected)."
                },
                "description": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected).",
                "type": "string",
                "enum": [
                  "on",
                  "off"
                ]
              },
              "template": {
                "title": "Layout",
                "x-inspector": {
                  "label": "Layout",
                  "control": "select",
                  "snap": [
                    "title",
                    "opener",
                    "split",
                    "cols",
                    "title-only",
                    "one-column",
                    "statement",
                    "section-description",
                    "mood",
                    "big-number",
                    "blank",
                    "subtitle-body",
                    "rows",
                    "plain",
                    "table",
                    "figure",
                    "pair",
                    "tiles",
                    "details",
                    "board",
                    "matrix",
                    "closing"
                  ],
                  "group": "Slide",
                  "help": "The layout the slide was made from; New slide and Apply layout write it."
                },
                "description": "The layout the slide was made from; New slide and Apply layout write it.",
                "type": "string",
                "enum": [
                  "title",
                  "opener",
                  "split",
                  "cols",
                  "title-only",
                  "one-column",
                  "statement",
                  "section-description",
                  "mood",
                  "big-number",
                  "blank",
                  "subtitle-body",
                  "rows",
                  "plain",
                  "table",
                  "figure",
                  "pair",
                  "tiles",
                  "details",
                  "board",
                  "matrix",
                  "closing"
                ]
              },
              "background": {
                "title": "Background",
                "x-inspector": {
                  "label": "Background",
                  "control": "json",
                  "group": "Slide",
                  "help": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack."
                },
                "description": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack.",
                "type": "object",
                "properties": {
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  }
                },
                "required": [
                  "color"
                ],
                "additionalProperties": false
              },
              "grammar": {
                "title": "Arranged from",
                "x-inspector": {
                  "label": "Arranged from",
                  "control": "readonly",
                  "group": "Slide",
                  "help": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it."
                },
                "description": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it.",
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "content",
                      "opener",
                      "mood",
                      "closing",
                      "title",
                      "statement"
                    ]
                  },
                  "layout": {
                    "$ref": "#/components/schemas/Layout"
                  },
                  "slots": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "enum": [
                        "main",
                        "head",
                        "headLeft",
                        "headRight",
                        "body",
                        "left",
                        "right",
                        "plate"
                      ]
                    },
                    "additionalProperties": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "boxes": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number",
                          "title": "X",
                          "x-inspector": {
                            "label": "X",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "y": {
                          "type": "number",
                          "title": "Y",
                          "x-inspector": {
                            "label": "Y",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "w": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Width",
                          "x-inspector": {
                            "label": "Width",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "h": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Height",
                          "x-inspector": {
                            "label": "Height",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "z": {
                          "title": "Z order",
                          "x-inspector": {
                            "label": "Z order",
                            "control": "number",
                            "group": "Layout",
                            "help": "Higher draws over lower; block.order moves a block through the stack."
                          },
                          "description": "Higher draws over lower; block.order moves a block through the stack.",
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "rotate": {
                          "title": "Rotate",
                          "x-inspector": {
                            "label": "Rotate",
                            "control": "number",
                            "snap": [
                              0,
                              15,
                              30,
                              45,
                              90,
                              180,
                              270
                            ],
                            "group": "Layout",
                            "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                          },
                          "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                          "type": "number",
                          "minimum": 0,
                          "exclusiveMaximum": 360
                        },
                        "flip": {
                          "title": "Flip",
                          "x-inspector": {
                            "label": "Flip",
                            "control": "select",
                            "snap": [
                              "h",
                              "v",
                              "hv"
                            ],
                            "group": "Layout",
                            "help": "h mirrors left to right, v top to bottom, hv both."
                          },
                          "description": "h mirrors left to right, v top to bottom, hv both.",
                          "type": "string",
                          "enum": [
                            "h",
                            "v",
                            "hv"
                          ]
                        },
                        "group": {
                          "title": "Group",
                          "x-inspector": {
                            "label": "Group",
                            "control": "readonly",
                            "group": "Layout",
                            "help": "The tag the members of one group share; Group and Ungroup write it."
                          },
                          "description": "The tag the members of one group share; Group and Ungroup write it.",
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "w",
                        "h"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "fields": {
                    "type": "object",
                    "properties": {
                      "mark": {
                        "type": "object",
                        "properties": {
                          "w": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          },
                          "h": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          }
                        },
                        "required": [
                          "w",
                          "h"
                        ],
                        "additionalProperties": false
                      },
                      "measure": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "picture": {
                        "$ref": "#/components/schemas/Picture"
                      },
                      "plate": {
                        "type": "object",
                        "properties": {
                          "side": {
                            "type": "string",
                            "enum": [
                              "lower-left",
                              "lower-right",
                              "upper-left"
                            ]
                          },
                          "maxWidth": {
                            "type": "number",
                            "enum": [
                              740,
                              560,
                              720
                            ]
                          }
                        },
                        "required": [
                          "side",
                          "maxWidth"
                        ],
                        "additionalProperties": false
                      },
                      "sectionId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "template": {
                        "type": "string",
                        "enum": [
                          "title",
                          "opener",
                          "split",
                          "cols",
                          "title-only",
                          "one-column",
                          "statement",
                          "section-description",
                          "mood",
                          "big-number",
                          "blank",
                          "subtitle-body",
                          "rows",
                          "plain",
                          "table",
                          "figure",
                          "pair",
                          "tiles",
                          "details",
                          "board",
                          "matrix",
                          "closing"
                        ]
                      },
                      "autofit": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind",
                  "boxes"
                ],
                "additionalProperties": false
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "kind": {
                "type": "string",
                "const": "closing"
              },
              "picture": {
                "$ref": "#/components/schemas/Picture"
              },
              "plate": {
                "$ref": "#/components/schemas/Plate"
              },
              "mark": {
                "type": "object",
                "properties": {
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Mark width",
                    "x-inspector": {
                      "label": "Mark width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Mark height",
                    "x-inspector": {
                      "label": "Mark height",
                      "control": "number",
                      "group": "Layout"
                    }
                  }
                },
                "required": [
                  "w",
                  "h"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "schemaVersion",
              "id",
              "kind",
              "picture",
              "plate"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Slide"
                }
              },
              "title": {
                "title": "Title override",
                "x-inspector": {
                  "label": "Title override",
                  "control": "text",
                  "group": "Slide",
                  "help": "Replaces the derived title (first heading, big or plate title)."
                },
                "description": "Replaces the derived title (first heading, big or plate title).",
                "type": "string"
              },
              "notes": {
                "title": "Notes",
                "x-inspector": {
                  "label": "Notes",
                  "control": "textarea",
                  "group": "Slide"
                },
                "type": "string"
              },
              "tags": {
                "title": "Tags",
                "x-inspector": {
                  "label": "Tags",
                  "control": "json",
                  "group": "Slide"
                },
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "skip": {
                "title": "Skip slide",
                "x-inspector": {
                  "label": "Skip slide",
                  "control": "toggle",
                  "group": "Slide",
                  "help": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked."
                },
                "description": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked.",
                "type": "boolean",
                "const": true
              },
              "counter": {
                "title": "Slide number",
                "x-inspector": {
                  "label": "Slide number",
                  "control": "select",
                  "snap": [
                    "on",
                    "off"
                  ],
                  "group": "Slide",
                  "help": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected)."
                },
                "description": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected).",
                "type": "string",
                "enum": [
                  "on",
                  "off"
                ]
              },
              "template": {
                "title": "Layout",
                "x-inspector": {
                  "label": "Layout",
                  "control": "select",
                  "snap": [
                    "title",
                    "opener",
                    "split",
                    "cols",
                    "title-only",
                    "one-column",
                    "statement",
                    "section-description",
                    "mood",
                    "big-number",
                    "blank",
                    "subtitle-body",
                    "rows",
                    "plain",
                    "table",
                    "figure",
                    "pair",
                    "tiles",
                    "details",
                    "board",
                    "matrix",
                    "closing"
                  ],
                  "group": "Slide",
                  "help": "The layout the slide was made from; New slide and Apply layout write it."
                },
                "description": "The layout the slide was made from; New slide and Apply layout write it.",
                "type": "string",
                "enum": [
                  "title",
                  "opener",
                  "split",
                  "cols",
                  "title-only",
                  "one-column",
                  "statement",
                  "section-description",
                  "mood",
                  "big-number",
                  "blank",
                  "subtitle-body",
                  "rows",
                  "plain",
                  "table",
                  "figure",
                  "pair",
                  "tiles",
                  "details",
                  "board",
                  "matrix",
                  "closing"
                ]
              },
              "background": {
                "title": "Background",
                "x-inspector": {
                  "label": "Background",
                  "control": "json",
                  "group": "Slide",
                  "help": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack."
                },
                "description": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack.",
                "type": "object",
                "properties": {
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  }
                },
                "required": [
                  "color"
                ],
                "additionalProperties": false
              },
              "grammar": {
                "title": "Arranged from",
                "x-inspector": {
                  "label": "Arranged from",
                  "control": "readonly",
                  "group": "Slide",
                  "help": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it."
                },
                "description": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it.",
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "content",
                      "opener",
                      "mood",
                      "closing",
                      "title",
                      "statement"
                    ]
                  },
                  "layout": {
                    "$ref": "#/components/schemas/Layout"
                  },
                  "slots": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "enum": [
                        "main",
                        "head",
                        "headLeft",
                        "headRight",
                        "body",
                        "left",
                        "right",
                        "plate"
                      ]
                    },
                    "additionalProperties": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "boxes": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number",
                          "title": "X",
                          "x-inspector": {
                            "label": "X",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "y": {
                          "type": "number",
                          "title": "Y",
                          "x-inspector": {
                            "label": "Y",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "w": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Width",
                          "x-inspector": {
                            "label": "Width",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "h": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Height",
                          "x-inspector": {
                            "label": "Height",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "z": {
                          "title": "Z order",
                          "x-inspector": {
                            "label": "Z order",
                            "control": "number",
                            "group": "Layout",
                            "help": "Higher draws over lower; block.order moves a block through the stack."
                          },
                          "description": "Higher draws over lower; block.order moves a block through the stack.",
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "rotate": {
                          "title": "Rotate",
                          "x-inspector": {
                            "label": "Rotate",
                            "control": "number",
                            "snap": [
                              0,
                              15,
                              30,
                              45,
                              90,
                              180,
                              270
                            ],
                            "group": "Layout",
                            "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                          },
                          "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                          "type": "number",
                          "minimum": 0,
                          "exclusiveMaximum": 360
                        },
                        "flip": {
                          "title": "Flip",
                          "x-inspector": {
                            "label": "Flip",
                            "control": "select",
                            "snap": [
                              "h",
                              "v",
                              "hv"
                            ],
                            "group": "Layout",
                            "help": "h mirrors left to right, v top to bottom, hv both."
                          },
                          "description": "h mirrors left to right, v top to bottom, hv both.",
                          "type": "string",
                          "enum": [
                            "h",
                            "v",
                            "hv"
                          ]
                        },
                        "group": {
                          "title": "Group",
                          "x-inspector": {
                            "label": "Group",
                            "control": "readonly",
                            "group": "Layout",
                            "help": "The tag the members of one group share; Group and Ungroup write it."
                          },
                          "description": "The tag the members of one group share; Group and Ungroup write it.",
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "w",
                        "h"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "fields": {
                    "type": "object",
                    "properties": {
                      "mark": {
                        "type": "object",
                        "properties": {
                          "w": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          },
                          "h": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          }
                        },
                        "required": [
                          "w",
                          "h"
                        ],
                        "additionalProperties": false
                      },
                      "measure": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "picture": {
                        "$ref": "#/components/schemas/Picture"
                      },
                      "plate": {
                        "type": "object",
                        "properties": {
                          "side": {
                            "type": "string",
                            "enum": [
                              "lower-left",
                              "lower-right",
                              "upper-left"
                            ]
                          },
                          "maxWidth": {
                            "type": "number",
                            "enum": [
                              740,
                              560,
                              720
                            ]
                          }
                        },
                        "required": [
                          "side",
                          "maxWidth"
                        ],
                        "additionalProperties": false
                      },
                      "sectionId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "template": {
                        "type": "string",
                        "enum": [
                          "title",
                          "opener",
                          "split",
                          "cols",
                          "title-only",
                          "one-column",
                          "statement",
                          "section-description",
                          "mood",
                          "big-number",
                          "blank",
                          "subtitle-body",
                          "rows",
                          "plain",
                          "table",
                          "figure",
                          "pair",
                          "tiles",
                          "details",
                          "board",
                          "matrix",
                          "closing"
                        ]
                      },
                      "autofit": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind",
                  "boxes"
                ],
                "additionalProperties": false
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "kind": {
                "type": "string",
                "const": "title"
              },
              "mark": {
                "type": "object",
                "properties": {
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Mark width",
                    "x-inspector": {
                      "label": "Mark width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Mark height",
                    "x-inspector": {
                      "label": "Mark height",
                      "control": "number",
                      "group": "Layout"
                    }
                  }
                },
                "required": [
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "heading": {
                "type": "string",
                "title": "Heading",
                "x-inspector": {
                  "label": "Heading",
                  "control": "textarea",
                  "group": "Text"
                }
              },
              "lead": {
                "type": "string",
                "title": "Lead",
                "x-inspector": {
                  "label": "Lead",
                  "control": "textarea",
                  "group": "Text"
                }
              },
              "typography": {
                "title": "Field typography",
                "x-inspector": {
                  "label": "Field typography",
                  "control": "json",
                  "group": "Text",
                  "help": "The face and type settings a text field carries of its own, per field; the brand kit’s face for the field’s role when absent."
                },
                "description": "The face and type settings a text field carries of its own, per field; the brand kit’s face for the field’s role when absent.",
                "type": "object",
                "properties": {
                  "heading": {
                    "type": "object",
                    "properties": {
                      "size": {
                        "title": "Size",
                        "x-inspector": {
                          "label": "Size",
                          "control": "select",
                          "snap": [
                            88,
                            72,
                            58,
                            44,
                            34,
                            26,
                            24,
                            22,
                            20,
                            18,
                            17,
                            16,
                            15
                          ],
                          "group": "Text",
                          "help": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding."
                        },
                        "description": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding.",
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "weight": {
                        "title": "Weight",
                        "x-inspector": {
                          "label": "Weight",
                          "control": "select",
                          "snap": [
                            300,
                            400,
                            500,
                            600,
                            700
                          ],
                          "group": "Text",
                          "help": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md)."
                        },
                        "description": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md).",
                        "type": "number",
                        "enum": [
                          300,
                          400,
                          500,
                          600,
                          700
                        ]
                      },
                      "align": {
                        "title": "Align",
                        "x-inspector": {
                          "label": "Align",
                          "control": "select",
                          "snap": [
                            "left",
                            "center",
                            "right",
                            "justify"
                          ],
                          "group": "Text"
                        },
                        "type": "string",
                        "enum": [
                          "left",
                          "center",
                          "right",
                          "justify"
                        ]
                      },
                      "tracking": {
                        "title": "Tracking (em)",
                        "x-inspector": {
                          "label": "Tracking (em)",
                          "control": "number",
                          "snap": [
                            -0.025,
                            -0.02,
                            -0.015,
                            -0.01,
                            0,
                            0.01,
                            0.02
                          ],
                          "group": "Text",
                          "help": "Letter spacing in em; the display faces sit at -0.025 (head:58)."
                        },
                        "description": "Letter spacing in em; the display faces sit at -0.025 (head:58).",
                        "type": "number"
                      },
                      "leading": {
                        "title": "Line spacing",
                        "x-inspector": {
                          "label": "Line spacing",
                          "control": "number",
                          "snap": [
                            1,
                            1.02,
                            1.06,
                            1.08,
                            1.1,
                            1.15,
                            1.2,
                            1.25,
                            1.3,
                            1.4,
                            1.45,
                            1.5,
                            1.7,
                            2
                          ],
                          "group": "Text",
                          "help": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu."
                        },
                        "description": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu.",
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "spaceBefore": {
                        "title": "Space before",
                        "x-inspector": {
                          "label": "Space before",
                          "control": "number",
                          "snap": [
                            0,
                            8,
                            16,
                            24
                          ],
                          "group": "Text",
                          "help": "Space above every paragraph but the first, in px."
                        },
                        "description": "Space above every paragraph but the first, in px.",
                        "type": "number",
                        "minimum": 0
                      },
                      "spaceAfter": {
                        "title": "Space after",
                        "x-inspector": {
                          "label": "Space after",
                          "control": "number",
                          "snap": [
                            0,
                            8,
                            16,
                            24
                          ],
                          "group": "Text",
                          "help": "Space below every paragraph but the last, in px."
                        },
                        "description": "Space below every paragraph but the last, in px.",
                        "type": "number",
                        "minimum": 0
                      },
                      "columns": {
                        "title": "Columns",
                        "x-inspector": {
                          "label": "Columns",
                          "control": "select",
                          "snap": [
                            1,
                            2,
                            3
                          ],
                          "group": "Text",
                          "help": "Text columns inside the block with a 40 px gap; one when absent."
                        },
                        "description": "Text columns inside the block with a 40 px gap; one when absent.",
                        "type": "number",
                        "enum": [
                          1,
                          2,
                          3
                        ]
                      },
                      "indent": {
                        "title": "Indent",
                        "x-inspector": {
                          "label": "Indent",
                          "control": "number",
                          "snap": [
                            0,
                            64,
                            128,
                            192
                          ],
                          "group": "Text",
                          "help": "The paragraphs’ left indent in px; Increase indent steps it by 64."
                        },
                        "description": "The paragraphs’ left indent in px; Increase indent steps it by 64.",
                        "type": "number",
                        "minimum": 0
                      },
                      "family": {
                        "title": "Font",
                        "x-inspector": {
                          "label": "Font",
                          "control": "select",
                          "snap": [
                            "inter",
                            "roboto",
                            "open-sans",
                            "lato",
                            "montserrat",
                            "poppins",
                            "source-sans-3",
                            "source-serif-4",
                            "merriweather",
                            "playfair-display",
                            "lora",
                            "pt-serif",
                            "libre-baskerville",
                            "eb-garamond",
                            "nunito",
                            "raleway",
                            "work-sans",
                            "dm-sans",
                            "space-grotesk",
                            "oswald",
                            "bebas-neue",
                            "roboto-mono",
                            "jetbrains-mono",
                            "ibm-plex-sans",
                            "ibm-plex-mono",
                            "fira-code",
                            "geist",
                            "geist-mono",
                            "instrument-sans",
                            "manrope",
                            "bricolage-grotesque",
                            "schibsted-grotesk",
                            "newsreader",
                            "fraunces"
                          ],
                          "group": "Text",
                          "help": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent."
                        },
                        "description": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent.",
                        "type": "string",
                        "enum": [
                          "inter",
                          "roboto",
                          "open-sans",
                          "lato",
                          "montserrat",
                          "poppins",
                          "source-sans-3",
                          "source-serif-4",
                          "merriweather",
                          "playfair-display",
                          "lora",
                          "pt-serif",
                          "libre-baskerville",
                          "eb-garamond",
                          "nunito",
                          "raleway",
                          "work-sans",
                          "dm-sans",
                          "space-grotesk",
                          "oswald",
                          "bebas-neue",
                          "roboto-mono",
                          "jetbrains-mono",
                          "ibm-plex-sans",
                          "ibm-plex-mono",
                          "fira-code",
                          "geist",
                          "geist-mono",
                          "instrument-sans",
                          "manrope",
                          "bricolage-grotesque",
                          "schibsted-grotesk",
                          "newsreader",
                          "fraunces"
                        ]
                      },
                      "numerals": {
                        "title": "Tabular figures",
                        "x-inspector": {
                          "label": "Tabular figures",
                          "control": "toggle",
                          "snap": [
                            "tabular"
                          ],
                          "group": "Text",
                          "help": "Every digit takes the same width, so numbers line up in a column"
                        },
                        "description": "Every digit takes the same width, so numbers line up in a column",
                        "type": "string",
                        "enum": [
                          "tabular"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "lead": {
                    "type": "object",
                    "properties": {
                      "size": {
                        "title": "Size",
                        "x-inspector": {
                          "label": "Size",
                          "control": "select",
                          "snap": [
                            88,
                            72,
                            58,
                            44,
                            34,
                            26,
                            24,
                            22,
                            20,
                            18,
                            17,
                            16,
                            15
                          ],
                          "group": "Text",
                          "help": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding."
                        },
                        "description": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding.",
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "weight": {
                        "title": "Weight",
                        "x-inspector": {
                          "label": "Weight",
                          "control": "select",
                          "snap": [
                            300,
                            400,
                            500,
                            600,
                            700
                          ],
                          "group": "Text",
                          "help": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md)."
                        },
                        "description": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md).",
                        "type": "number",
                        "enum": [
                          300,
                          400,
                          500,
                          600,
                          700
                        ]
                      },
                      "align": {
                        "title": "Align",
                        "x-inspector": {
                          "label": "Align",
                          "control": "select",
                          "snap": [
                            "left",
                            "center",
                            "right",
                            "justify"
                          ],
                          "group": "Text"
                        },
                        "type": "string",
                        "enum": [
                          "left",
                          "center",
                          "right",
                          "justify"
                        ]
                      },
                      "tracking": {
                        "title": "Tracking (em)",
                        "x-inspector": {
                          "label": "Tracking (em)",
                          "control": "number",
                          "snap": [
                            -0.025,
                            -0.02,
                            -0.015,
                            -0.01,
                            0,
                            0.01,
                            0.02
                          ],
                          "group": "Text",
                          "help": "Letter spacing in em; the display faces sit at -0.025 (head:58)."
                        },
                        "description": "Letter spacing in em; the display faces sit at -0.025 (head:58).",
                        "type": "number"
                      },
                      "leading": {
                        "title": "Line spacing",
                        "x-inspector": {
                          "label": "Line spacing",
                          "control": "number",
                          "snap": [
                            1,
                            1.02,
                            1.06,
                            1.08,
                            1.1,
                            1.15,
                            1.2,
                            1.25,
                            1.3,
                            1.4,
                            1.45,
                            1.5,
                            1.7,
                            2
                          ],
                          "group": "Text",
                          "help": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu."
                        },
                        "description": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu.",
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "spaceBefore": {
                        "title": "Space before",
                        "x-inspector": {
                          "label": "Space before",
                          "control": "number",
                          "snap": [
                            0,
                            8,
                            16,
                            24
                          ],
                          "group": "Text",
                          "help": "Space above every paragraph but the first, in px."
                        },
                        "description": "Space above every paragraph but the first, in px.",
                        "type": "number",
                        "minimum": 0
                      },
                      "spaceAfter": {
                        "title": "Space after",
                        "x-inspector": {
                          "label": "Space after",
                          "control": "number",
                          "snap": [
                            0,
                            8,
                            16,
                            24
                          ],
                          "group": "Text",
                          "help": "Space below every paragraph but the last, in px."
                        },
                        "description": "Space below every paragraph but the last, in px.",
                        "type": "number",
                        "minimum": 0
                      },
                      "columns": {
                        "title": "Columns",
                        "x-inspector": {
                          "label": "Columns",
                          "control": "select",
                          "snap": [
                            1,
                            2,
                            3
                          ],
                          "group": "Text",
                          "help": "Text columns inside the block with a 40 px gap; one when absent."
                        },
                        "description": "Text columns inside the block with a 40 px gap; one when absent.",
                        "type": "number",
                        "enum": [
                          1,
                          2,
                          3
                        ]
                      },
                      "indent": {
                        "title": "Indent",
                        "x-inspector": {
                          "label": "Indent",
                          "control": "number",
                          "snap": [
                            0,
                            64,
                            128,
                            192
                          ],
                          "group": "Text",
                          "help": "The paragraphs’ left indent in px; Increase indent steps it by 64."
                        },
                        "description": "The paragraphs’ left indent in px; Increase indent steps it by 64.",
                        "type": "number",
                        "minimum": 0
                      },
                      "family": {
                        "title": "Font",
                        "x-inspector": {
                          "label": "Font",
                          "control": "select",
                          "snap": [
                            "inter",
                            "roboto",
                            "open-sans",
                            "lato",
                            "montserrat",
                            "poppins",
                            "source-sans-3",
                            "source-serif-4",
                            "merriweather",
                            "playfair-display",
                            "lora",
                            "pt-serif",
                            "libre-baskerville",
                            "eb-garamond",
                            "nunito",
                            "raleway",
                            "work-sans",
                            "dm-sans",
                            "space-grotesk",
                            "oswald",
                            "bebas-neue",
                            "roboto-mono",
                            "jetbrains-mono",
                            "ibm-plex-sans",
                            "ibm-plex-mono",
                            "fira-code",
                            "geist",
                            "geist-mono",
                            "instrument-sans",
                            "manrope",
                            "bricolage-grotesque",
                            "schibsted-grotesk",
                            "newsreader",
                            "fraunces"
                          ],
                          "group": "Text",
                          "help": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent."
                        },
                        "description": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent.",
                        "type": "string",
                        "enum": [
                          "inter",
                          "roboto",
                          "open-sans",
                          "lato",
                          "montserrat",
                          "poppins",
                          "source-sans-3",
                          "source-serif-4",
                          "merriweather",
                          "playfair-display",
                          "lora",
                          "pt-serif",
                          "libre-baskerville",
                          "eb-garamond",
                          "nunito",
                          "raleway",
                          "work-sans",
                          "dm-sans",
                          "space-grotesk",
                          "oswald",
                          "bebas-neue",
                          "roboto-mono",
                          "jetbrains-mono",
                          "ibm-plex-sans",
                          "ibm-plex-mono",
                          "fira-code",
                          "geist",
                          "geist-mono",
                          "instrument-sans",
                          "manrope",
                          "bricolage-grotesque",
                          "schibsted-grotesk",
                          "newsreader",
                          "fraunces"
                        ]
                      },
                      "numerals": {
                        "title": "Tabular figures",
                        "x-inspector": {
                          "label": "Tabular figures",
                          "control": "toggle",
                          "snap": [
                            "tabular"
                          ],
                          "group": "Text",
                          "help": "Every digit takes the same width, so numbers line up in a column"
                        },
                        "description": "Every digit takes the same width, so numbers line up in a column",
                        "type": "string",
                        "enum": [
                          "tabular"
                        ]
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "schemaVersion",
              "id",
              "kind",
              "mark",
              "heading",
              "lead"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Slide"
                }
              },
              "title": {
                "title": "Title override",
                "x-inspector": {
                  "label": "Title override",
                  "control": "text",
                  "group": "Slide",
                  "help": "Replaces the derived title (first heading, big or plate title)."
                },
                "description": "Replaces the derived title (first heading, big or plate title).",
                "type": "string"
              },
              "notes": {
                "title": "Notes",
                "x-inspector": {
                  "label": "Notes",
                  "control": "textarea",
                  "group": "Slide"
                },
                "type": "string"
              },
              "tags": {
                "title": "Tags",
                "x-inspector": {
                  "label": "Tags",
                  "control": "json",
                  "group": "Slide"
                },
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "skip": {
                "title": "Skip slide",
                "x-inspector": {
                  "label": "Skip slide",
                  "control": "toggle",
                  "group": "Slide",
                  "help": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked."
                },
                "description": "A skipped slide is left out of the slideshow, the shared view, the downloads and the print unless asked.",
                "type": "boolean",
                "const": true
              },
              "counter": {
                "title": "Slide number",
                "x-inspector": {
                  "label": "Slide number",
                  "control": "select",
                  "snap": [
                    "on",
                    "off"
                  ],
                  "group": "Slide",
                  "help": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected)."
                },
                "description": "Numbers this slide, or takes its number away, whatever the presentation’s Slide numbers say (Insert > Slide numbers > Apply to selected).",
                "type": "string",
                "enum": [
                  "on",
                  "off"
                ]
              },
              "template": {
                "title": "Layout",
                "x-inspector": {
                  "label": "Layout",
                  "control": "select",
                  "snap": [
                    "title",
                    "opener",
                    "split",
                    "cols",
                    "title-only",
                    "one-column",
                    "statement",
                    "section-description",
                    "mood",
                    "big-number",
                    "blank",
                    "subtitle-body",
                    "rows",
                    "plain",
                    "table",
                    "figure",
                    "pair",
                    "tiles",
                    "details",
                    "board",
                    "matrix",
                    "closing"
                  ],
                  "group": "Slide",
                  "help": "The layout the slide was made from; New slide and Apply layout write it."
                },
                "description": "The layout the slide was made from; New slide and Apply layout write it.",
                "type": "string",
                "enum": [
                  "title",
                  "opener",
                  "split",
                  "cols",
                  "title-only",
                  "one-column",
                  "statement",
                  "section-description",
                  "mood",
                  "big-number",
                  "blank",
                  "subtitle-body",
                  "rows",
                  "plain",
                  "table",
                  "figure",
                  "pair",
                  "tiles",
                  "details",
                  "board",
                  "matrix",
                  "closing"
                ]
              },
              "background": {
                "title": "Background",
                "x-inspector": {
                  "label": "Background",
                  "control": "json",
                  "group": "Slide",
                  "help": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack."
                },
                "description": "The colour behind the slide; the theme default when absent. A background picture is a picture object at the bottom of the stack.",
                "type": "object",
                "properties": {
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  }
                },
                "required": [
                  "color"
                ],
                "additionalProperties": false
              },
              "grammar": {
                "title": "Arranged from",
                "x-inspector": {
                  "label": "Arranged from",
                  "control": "readonly",
                  "group": "Slide",
                  "help": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it."
                },
                "description": "The layout and fields the slide had before it was arranged by hand; Apply layout re-flows from it.",
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "content",
                      "opener",
                      "mood",
                      "closing",
                      "title",
                      "statement"
                    ]
                  },
                  "layout": {
                    "$ref": "#/components/schemas/Layout"
                  },
                  "slots": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "enum": [
                        "main",
                        "head",
                        "headLeft",
                        "headRight",
                        "body",
                        "left",
                        "right",
                        "plate"
                      ]
                    },
                    "additionalProperties": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "boxes": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number",
                          "title": "X",
                          "x-inspector": {
                            "label": "X",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "y": {
                          "type": "number",
                          "title": "Y",
                          "x-inspector": {
                            "label": "Y",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "w": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Width",
                          "x-inspector": {
                            "label": "Width",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "h": {
                          "type": "number",
                          "exclusiveMinimum": 0,
                          "title": "Height",
                          "x-inspector": {
                            "label": "Height",
                            "control": "number",
                            "group": "Layout"
                          }
                        },
                        "z": {
                          "title": "Z order",
                          "x-inspector": {
                            "label": "Z order",
                            "control": "number",
                            "group": "Layout",
                            "help": "Higher draws over lower; block.order moves a block through the stack."
                          },
                          "description": "Higher draws over lower; block.order moves a block through the stack.",
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "rotate": {
                          "title": "Rotate",
                          "x-inspector": {
                            "label": "Rotate",
                            "control": "number",
                            "snap": [
                              0,
                              15,
                              30,
                              45,
                              90,
                              180,
                              270
                            ],
                            "group": "Layout",
                            "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                          },
                          "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                          "type": "number",
                          "minimum": 0,
                          "exclusiveMaximum": 360
                        },
                        "flip": {
                          "title": "Flip",
                          "x-inspector": {
                            "label": "Flip",
                            "control": "select",
                            "snap": [
                              "h",
                              "v",
                              "hv"
                            ],
                            "group": "Layout",
                            "help": "h mirrors left to right, v top to bottom, hv both."
                          },
                          "description": "h mirrors left to right, v top to bottom, hv both.",
                          "type": "string",
                          "enum": [
                            "h",
                            "v",
                            "hv"
                          ]
                        },
                        "group": {
                          "title": "Group",
                          "x-inspector": {
                            "label": "Group",
                            "control": "readonly",
                            "group": "Layout",
                            "help": "The tag the members of one group share; Group and Ungroup write it."
                          },
                          "description": "The tag the members of one group share; Group and Ungroup write it.",
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "w",
                        "h"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "fields": {
                    "type": "object",
                    "properties": {
                      "mark": {
                        "type": "object",
                        "properties": {
                          "w": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          },
                          "h": {
                            "type": "number",
                            "exclusiveMinimum": 0
                          }
                        },
                        "required": [
                          "w",
                          "h"
                        ],
                        "additionalProperties": false
                      },
                      "measure": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "picture": {
                        "$ref": "#/components/schemas/Picture"
                      },
                      "plate": {
                        "type": "object",
                        "properties": {
                          "side": {
                            "type": "string",
                            "enum": [
                              "lower-left",
                              "lower-right",
                              "upper-left"
                            ]
                          },
                          "maxWidth": {
                            "type": "number",
                            "enum": [
                              740,
                              560,
                              720
                            ]
                          }
                        },
                        "required": [
                          "side",
                          "maxWidth"
                        ],
                        "additionalProperties": false
                      },
                      "sectionId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "template": {
                        "type": "string",
                        "enum": [
                          "title",
                          "opener",
                          "split",
                          "cols",
                          "title-only",
                          "one-column",
                          "statement",
                          "section-description",
                          "mood",
                          "big-number",
                          "blank",
                          "subtitle-body",
                          "rows",
                          "plain",
                          "table",
                          "figure",
                          "pair",
                          "tiles",
                          "details",
                          "board",
                          "matrix",
                          "closing"
                        ]
                      },
                      "autofit": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind",
                  "boxes"
                ],
                "additionalProperties": false
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "kind": {
                "type": "string",
                "const": "statement"
              },
              "big": {
                "type": "string",
                "title": "Statement",
                "x-inspector": {
                  "label": "Statement",
                  "control": "text",
                  "group": "Text"
                }
              },
              "measure": {
                "title": "Measure (ch)",
                "x-inspector": {
                  "label": "Measure (ch)",
                  "control": "number",
                  "snap": [
                    22,
                    32
                  ],
                  "group": "Layout"
                },
                "type": "number",
                "exclusiveMinimum": 0
              },
              "typography": {
                "title": "Field typography",
                "x-inspector": {
                  "label": "Field typography",
                  "control": "json",
                  "group": "Text",
                  "help": "The face and type settings a text field carries of its own, per field; the brand kit’s face for the field’s role when absent."
                },
                "description": "The face and type settings a text field carries of its own, per field; the brand kit’s face for the field’s role when absent.",
                "type": "object",
                "properties": {
                  "big": {
                    "type": "object",
                    "properties": {
                      "size": {
                        "title": "Size",
                        "x-inspector": {
                          "label": "Size",
                          "control": "select",
                          "snap": [
                            88,
                            72,
                            58,
                            44,
                            34,
                            26,
                            24,
                            22,
                            20,
                            18,
                            17,
                            16,
                            15
                          ],
                          "group": "Text",
                          "help": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding."
                        },
                        "description": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding.",
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "weight": {
                        "title": "Weight",
                        "x-inspector": {
                          "label": "Weight",
                          "control": "select",
                          "snap": [
                            300,
                            400,
                            500,
                            600,
                            700
                          ],
                          "group": "Text",
                          "help": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md)."
                        },
                        "description": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md).",
                        "type": "number",
                        "enum": [
                          300,
                          400,
                          500,
                          600,
                          700
                        ]
                      },
                      "align": {
                        "title": "Align",
                        "x-inspector": {
                          "label": "Align",
                          "control": "select",
                          "snap": [
                            "left",
                            "center",
                            "right",
                            "justify"
                          ],
                          "group": "Text"
                        },
                        "type": "string",
                        "enum": [
                          "left",
                          "center",
                          "right",
                          "justify"
                        ]
                      },
                      "tracking": {
                        "title": "Tracking (em)",
                        "x-inspector": {
                          "label": "Tracking (em)",
                          "control": "number",
                          "snap": [
                            -0.025,
                            -0.02,
                            -0.015,
                            -0.01,
                            0,
                            0.01,
                            0.02
                          ],
                          "group": "Text",
                          "help": "Letter spacing in em; the display faces sit at -0.025 (head:58)."
                        },
                        "description": "Letter spacing in em; the display faces sit at -0.025 (head:58).",
                        "type": "number"
                      },
                      "leading": {
                        "title": "Line spacing",
                        "x-inspector": {
                          "label": "Line spacing",
                          "control": "number",
                          "snap": [
                            1,
                            1.02,
                            1.06,
                            1.08,
                            1.1,
                            1.15,
                            1.2,
                            1.25,
                            1.3,
                            1.4,
                            1.45,
                            1.5,
                            1.7,
                            2
                          ],
                          "group": "Text",
                          "help": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu."
                        },
                        "description": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu.",
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "spaceBefore": {
                        "title": "Space before",
                        "x-inspector": {
                          "label": "Space before",
                          "control": "number",
                          "snap": [
                            0,
                            8,
                            16,
                            24
                          ],
                          "group": "Text",
                          "help": "Space above every paragraph but the first, in px."
                        },
                        "description": "Space above every paragraph but the first, in px.",
                        "type": "number",
                        "minimum": 0
                      },
                      "spaceAfter": {
                        "title": "Space after",
                        "x-inspector": {
                          "label": "Space after",
                          "control": "number",
                          "snap": [
                            0,
                            8,
                            16,
                            24
                          ],
                          "group": "Text",
                          "help": "Space below every paragraph but the last, in px."
                        },
                        "description": "Space below every paragraph but the last, in px.",
                        "type": "number",
                        "minimum": 0
                      },
                      "columns": {
                        "title": "Columns",
                        "x-inspector": {
                          "label": "Columns",
                          "control": "select",
                          "snap": [
                            1,
                            2,
                            3
                          ],
                          "group": "Text",
                          "help": "Text columns inside the block with a 40 px gap; one when absent."
                        },
                        "description": "Text columns inside the block with a 40 px gap; one when absent.",
                        "type": "number",
                        "enum": [
                          1,
                          2,
                          3
                        ]
                      },
                      "indent": {
                        "title": "Indent",
                        "x-inspector": {
                          "label": "Indent",
                          "control": "number",
                          "snap": [
                            0,
                            64,
                            128,
                            192
                          ],
                          "group": "Text",
                          "help": "The paragraphs’ left indent in px; Increase indent steps it by 64."
                        },
                        "description": "The paragraphs’ left indent in px; Increase indent steps it by 64.",
                        "type": "number",
                        "minimum": 0
                      },
                      "family": {
                        "title": "Font",
                        "x-inspector": {
                          "label": "Font",
                          "control": "select",
                          "snap": [
                            "inter",
                            "roboto",
                            "open-sans",
                            "lato",
                            "montserrat",
                            "poppins",
                            "source-sans-3",
                            "source-serif-4",
                            "merriweather",
                            "playfair-display",
                            "lora",
                            "pt-serif",
                            "libre-baskerville",
                            "eb-garamond",
                            "nunito",
                            "raleway",
                            "work-sans",
                            "dm-sans",
                            "space-grotesk",
                            "oswald",
                            "bebas-neue",
                            "roboto-mono",
                            "jetbrains-mono",
                            "ibm-plex-sans",
                            "ibm-plex-mono",
                            "fira-code",
                            "geist",
                            "geist-mono",
                            "instrument-sans",
                            "manrope",
                            "bricolage-grotesque",
                            "schibsted-grotesk",
                            "newsreader",
                            "fraunces"
                          ],
                          "group": "Text",
                          "help": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent."
                        },
                        "description": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent.",
                        "type": "string",
                        "enum": [
                          "inter",
                          "roboto",
                          "open-sans",
                          "lato",
                          "montserrat",
                          "poppins",
                          "source-sans-3",
                          "source-serif-4",
                          "merriweather",
                          "playfair-display",
                          "lora",
                          "pt-serif",
                          "libre-baskerville",
                          "eb-garamond",
                          "nunito",
                          "raleway",
                          "work-sans",
                          "dm-sans",
                          "space-grotesk",
                          "oswald",
                          "bebas-neue",
                          "roboto-mono",
                          "jetbrains-mono",
                          "ibm-plex-sans",
                          "ibm-plex-mono",
                          "fira-code",
                          "geist",
                          "geist-mono",
                          "instrument-sans",
                          "manrope",
                          "bricolage-grotesque",
                          "schibsted-grotesk",
                          "newsreader",
                          "fraunces"
                        ]
                      },
                      "numerals": {
                        "title": "Tabular figures",
                        "x-inspector": {
                          "label": "Tabular figures",
                          "control": "toggle",
                          "snap": [
                            "tabular"
                          ],
                          "group": "Text",
                          "help": "Every digit takes the same width, so numbers line up in a column"
                        },
                        "description": "Every digit takes the same width, so numbers line up in a column",
                        "type": "string",
                        "enum": [
                          "tabular"
                        ]
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "schemaVersion",
              "id",
              "kind",
              "big"
            ],
            "additionalProperties": false
          }
        ]
      },
      "Layout": {
        "$id": "#/components/schemas/Layout",
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "cols"
              },
              "ratio": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "5/7",
                      "4/8",
                      "1/1"
                    ]
                  },
                  {
                    "type": "object",
                    "properties": {
                      "left": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      }
                    },
                    "required": [
                      "left"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "right": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      }
                    },
                    "required": [
                      "right"
                    ],
                    "additionalProperties": false
                  }
                ],
                "title": "Ratio",
                "x-inspector": {
                  "label": "Ratio",
                  "control": "json",
                  "snap": [
                    "5/7",
                    "4/8",
                    "1/1"
                  ],
                  "group": "Layout",
                  "help": "5/7 is the deck’s .cols, 4/8 .wide-right, 1/1 .even; { left: 390 } fixes one column in px (head:83-85)."
                },
                "description": "5/7 is the deck’s .cols, 4/8 .wide-right, 1/1 .even; { left: 390 } fixes one column in px (head:83-85)."
              },
              "gap": {
                "title": "Gap",
                "x-inspector": {
                  "label": "Gap",
                  "control": "select",
                  "snap": [
                    72,
                    56,
                    48
                  ],
                  "group": "Layout"
                },
                "type": "number",
                "enum": [
                  72,
                  56,
                  48
                ]
              },
              "align": {
                "title": "Align",
                "x-inspector": {
                  "label": "Align",
                  "control": "select",
                  "snap": [
                    "start",
                    "center"
                  ],
                  "group": "Layout"
                },
                "type": "string",
                "enum": [
                  "start",
                  "center"
                ]
              }
            },
            "required": [
              "type",
              "ratio"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "split"
              },
              "gap": {
                "title": "Gap",
                "x-inspector": {
                  "label": "Gap",
                  "control": "select",
                  "snap": [
                    56,
                    44,
                    40,
                    36,
                    32,
                    26
                  ],
                  "group": "Layout",
                  "help": "The .split gap variants the deck sets by hand (report 03 section 11 item 8)."
                },
                "description": "The .split gap variants the deck sets by hand (report 03 section 11 item 8).",
                "type": "number",
                "enum": [
                  56,
                  44,
                  40,
                  36,
                  32,
                  26
                ]
              },
              "head": {
                "title": "Head",
                "x-inspector": {
                  "label": "Head",
                  "control": "json",
                  "snap": [
                    "single",
                    "5/7",
                    "4/8"
                  ],
                  "group": "Layout",
                  "help": "single fills the head slot; cols splits it into headLeft and headRight (item 7)."
                },
                "description": "single fills the head slot; cols splits it into headLeft and headRight (item 7).",
                "anyOf": [
                  {
                    "type": "string",
                    "const": "single"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "cols": {
                        "type": "string",
                        "enum": [
                          "5/7",
                          "4/8"
                        ]
                      },
                      "align": {
                        "type": "string",
                        "enum": [
                          "start",
                          "baseline"
                        ]
                      }
                    },
                    "required": [
                      "cols"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "body": {
                "title": "Body alignment",
                "x-inspector": {
                  "label": "Body alignment",
                  "control": "json",
                  "snap": [
                    "start",
                    "center",
                    "end"
                  ],
                  "group": "Layout"
                },
                "type": "object",
                "properties": {
                  "align": {
                    "type": "string",
                    "enum": [
                      "start",
                      "center",
                      "end"
                    ]
                  }
                },
                "required": [
                  "align"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "center"
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "left-mid"
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "stack"
              },
              "gap": {
                "title": "Gap",
                "x-inspector": {
                  "label": "Gap",
                  "control": "number",
                  "group": "Layout"
                },
                "type": "number",
                "minimum": 0
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "freeform"
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          }
        ]
      },
      "Picture": {
        "$id": "#/components/schemas/Picture",
        "type": "object",
        "properties": {
          "asset": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              {
                "type": "string",
                "const": ""
              }
            ],
            "title": "Picture",
            "x-inspector": {
              "label": "Picture",
              "control": "asset",
              "group": "Asset"
            }
          },
          "fit": {
            "type": "string",
            "const": "cover"
          },
          "position": {
            "title": "Position",
            "x-inspector": {
              "label": "Position",
              "control": "select",
              "snap": [
                "center",
                "top",
                "bottom"
              ],
              "group": "Layout"
            },
            "type": "string",
            "enum": [
              "center",
              "top",
              "bottom"
            ]
          }
        },
        "required": [
          "asset",
          "fit"
        ],
        "additionalProperties": false
      },
      "Plate": {
        "$id": "#/components/schemas/Plate",
        "type": "object",
        "properties": {
          "side": {
            "type": "string",
            "enum": [
              "lower-left",
              "lower-right",
              "upper-left"
            ],
            "title": "Plate side",
            "x-inspector": {
              "label": "Plate side",
              "control": "select",
              "snap": [
                "lower-left",
                "lower-right",
                "upper-left"
              ],
              "group": "Layout",
              "help": "Opener lower left, mood lower right, closing upper left (SPEC 2.1)."
            },
            "description": "Opener lower left, mood lower right, closing upper left (SPEC 2.1)."
          },
          "maxWidth": {
            "type": "number",
            "enum": [
              740,
              560,
              720
            ],
            "title": "Plate max width",
            "x-inspector": {
              "label": "Plate max width",
              "control": "select",
              "snap": [
                740,
                560,
                720
              ],
              "group": "Layout",
              "help": "740 for an opener, 560 for a mood slide, 720 for the closing (SPEC 2.1)."
            },
            "description": "740 for an opener, 560 for a mood slide, 720 for the closing (SPEC 2.1)."
          },
          "blocks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Block"
            }
          }
        },
        "required": [
          "side",
          "maxWidth",
          "blocks"
        ],
        "additionalProperties": false
      },
      "Block": {
        "$id": "#/components/schemas/Block",
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "heading"
              },
              "level": {
                "type": "string",
                "enum": [
                  "h1",
                  "h2",
                  "big",
                  "title"
                ],
                "title": "Level",
                "x-inspector": {
                  "label": "Level",
                  "control": "select",
                  "snap": [
                    "h1",
                    "h2",
                    "big",
                    "title"
                  ],
                  "group": "Block",
                  "help": "h1 88 px, h2 44 px, big 72 px, title 44 px on a mood plate (head:59-61)."
                },
                "description": "h1 88 px, h2 44 px, big 72 px, title 44 px on a mood plate (head:59-61)."
              },
              "text": {
                "type": "string",
                "title": "Text",
                "x-inspector": {
                  "label": "Text",
                  "control": "textarea",
                  "group": "Text"
                }
              },
              "marginTop": {
                "title": "Margin top",
                "x-inspector": {
                  "label": "Margin top",
                  "control": "number",
                  "group": "Layout"
                },
                "type": "number"
              },
              "marginBottom": {
                "title": "Margin bottom",
                "x-inspector": {
                  "label": "Margin bottom",
                  "control": "select",
                  "snap": [
                    0,
                    18
                  ],
                  "group": "Layout"
                },
                "type": "number",
                "enum": [
                  0,
                  18
                ]
              },
              "typography": {
                "title": "Typography",
                "x-inspector": {
                  "label": "Typography",
                  "control": "typography",
                  "group": "Text",
                  "help": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default."
                },
                "description": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default.",
                "type": "object",
                "properties": {
                  "size": {
                    "title": "Size",
                    "x-inspector": {
                      "label": "Size",
                      "control": "select",
                      "snap": [
                        88,
                        72,
                        58,
                        44,
                        34,
                        26,
                        24,
                        22,
                        20,
                        18,
                        17,
                        16,
                        15
                      ],
                      "group": "Text",
                      "help": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding."
                    },
                    "description": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "weight": {
                    "title": "Weight",
                    "x-inspector": {
                      "label": "Weight",
                      "control": "select",
                      "snap": [
                        300,
                        400,
                        500,
                        600,
                        700
                      ],
                      "group": "Text",
                      "help": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md)."
                    },
                    "description": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md).",
                    "type": "number",
                    "enum": [
                      300,
                      400,
                      500,
                      600,
                      700
                    ]
                  },
                  "align": {
                    "title": "Align",
                    "x-inspector": {
                      "label": "Align",
                      "control": "select",
                      "snap": [
                        "left",
                        "center",
                        "right",
                        "justify"
                      ],
                      "group": "Text"
                    },
                    "type": "string",
                    "enum": [
                      "left",
                      "center",
                      "right",
                      "justify"
                    ]
                  },
                  "tracking": {
                    "title": "Tracking (em)",
                    "x-inspector": {
                      "label": "Tracking (em)",
                      "control": "number",
                      "snap": [
                        -0.025,
                        -0.02,
                        -0.015,
                        -0.01,
                        0,
                        0.01,
                        0.02
                      ],
                      "group": "Text",
                      "help": "Letter spacing in em; the display faces sit at -0.025 (head:58)."
                    },
                    "description": "Letter spacing in em; the display faces sit at -0.025 (head:58).",
                    "type": "number"
                  },
                  "leading": {
                    "title": "Line spacing",
                    "x-inspector": {
                      "label": "Line spacing",
                      "control": "number",
                      "snap": [
                        1,
                        1.02,
                        1.06,
                        1.08,
                        1.1,
                        1.15,
                        1.2,
                        1.25,
                        1.3,
                        1.4,
                        1.45,
                        1.5,
                        1.7,
                        2
                      ],
                      "group": "Text",
                      "help": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu."
                    },
                    "description": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "spaceBefore": {
                    "title": "Space before",
                    "x-inspector": {
                      "label": "Space before",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space above every paragraph but the first, in px."
                    },
                    "description": "Space above every paragraph but the first, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "spaceAfter": {
                    "title": "Space after",
                    "x-inspector": {
                      "label": "Space after",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space below every paragraph but the last, in px."
                    },
                    "description": "Space below every paragraph but the last, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "columns": {
                    "title": "Columns",
                    "x-inspector": {
                      "label": "Columns",
                      "control": "select",
                      "snap": [
                        1,
                        2,
                        3
                      ],
                      "group": "Text",
                      "help": "Text columns inside the block with a 40 px gap; one when absent."
                    },
                    "description": "Text columns inside the block with a 40 px gap; one when absent.",
                    "type": "number",
                    "enum": [
                      1,
                      2,
                      3
                    ]
                  },
                  "indent": {
                    "title": "Indent",
                    "x-inspector": {
                      "label": "Indent",
                      "control": "number",
                      "snap": [
                        0,
                        64,
                        128,
                        192
                      ],
                      "group": "Text",
                      "help": "The paragraphs’ left indent in px; Increase indent steps it by 64."
                    },
                    "description": "The paragraphs’ left indent in px; Increase indent steps it by 64.",
                    "type": "number",
                    "minimum": 0
                  },
                  "family": {
                    "title": "Font",
                    "x-inspector": {
                      "label": "Font",
                      "control": "select",
                      "snap": [
                        "inter",
                        "roboto",
                        "open-sans",
                        "lato",
                        "montserrat",
                        "poppins",
                        "source-sans-3",
                        "source-serif-4",
                        "merriweather",
                        "playfair-display",
                        "lora",
                        "pt-serif",
                        "libre-baskerville",
                        "eb-garamond",
                        "nunito",
                        "raleway",
                        "work-sans",
                        "dm-sans",
                        "space-grotesk",
                        "oswald",
                        "bebas-neue",
                        "roboto-mono",
                        "jetbrains-mono",
                        "ibm-plex-sans",
                        "ibm-plex-mono",
                        "fira-code",
                        "geist",
                        "geist-mono",
                        "instrument-sans",
                        "manrope",
                        "bricolage-grotesque",
                        "schibsted-grotesk",
                        "newsreader",
                        "fraunces"
                      ],
                      "group": "Text",
                      "help": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent."
                    },
                    "description": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent.",
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  },
                  "numerals": {
                    "title": "Tabular figures",
                    "x-inspector": {
                      "label": "Tabular figures",
                      "control": "toggle",
                      "snap": [
                        "tabular"
                      ],
                      "group": "Text",
                      "help": "Every digit takes the same width, so numbers line up in a column"
                    },
                    "description": "Every digit takes the same width, so numbers line up in a column",
                    "type": "string",
                    "enum": [
                      "tabular"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "autofit": {
                "title": "Text fitting",
                "x-inspector": {
                  "label": "Text fitting",
                  "control": "select",
                  "snap": [
                    "none",
                    "shrink",
                    "grow"
                  ],
                  "group": "Text",
                  "help": "Do not autofit, Shrink text on overflow (steps the size down the ladder) or Resize shape to fit text (writes the box height, positioned blocks only); an explicit write, never a render time fit."
                },
                "description": "Do not autofit, Shrink text on overflow (steps the size down the ladder) or Resize shape to fit text (writes the box height, positioned blocks only); an explicit write, never a render time fit.",
                "type": "string",
                "enum": [
                  "none",
                  "shrink",
                  "grow"
                ]
              },
              "color": {
                "title": "Color",
                "x-inspector": {
                  "label": "Color",
                  "control": "color",
                  "snap": [
                    "ink",
                    "paper",
                    "ink-2",
                    "titanium",
                    "hair",
                    "hair-soft",
                    "plate",
                    "edge",
                    "green",
                    "amber",
                    "red",
                    "blue",
                    "accent"
                  ],
                  "group": "Text",
                  "help": "The text colour; the ink unless set."
                },
                "description": "The text colour; the ink unless set.",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              }
            },
            "required": [
              "id",
              "type",
              "level",
              "text"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "paragraph"
              },
              "text": {
                "type": "string",
                "title": "Text",
                "x-inspector": {
                  "label": "Text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "Paragraphs separated by a line break."
                },
                "description": "Paragraphs separated by a line break."
              },
              "role": {
                "title": "Role",
                "x-inspector": {
                  "label": "Role",
                  "control": "select",
                  "snap": [
                    "body",
                    "lead",
                    "cap"
                  ],
                  "group": "Block",
                  "help": "body 22 px, lead 26 px, cap 15 px titanium (head:62-65)."
                },
                "description": "body 22 px, lead 26 px, cap 15 px titanium (head:62-65).",
                "type": "string",
                "enum": [
                  "body",
                  "lead",
                  "cap"
                ]
              },
              "tone": {
                "title": "Tone",
                "x-inspector": {
                  "label": "Tone",
                  "control": "select",
                  "snap": [
                    "ink",
                    "muted"
                  ],
                  "group": "Block"
                },
                "type": "string",
                "enum": [
                  "ink",
                  "muted"
                ]
              },
              "measure": {
                "title": "Line length (ch)",
                "x-inspector": {
                  "label": "Line length (ch)",
                  "control": "number",
                  "snap": [
                    32,
                    56
                  ],
                  "group": "Layout",
                  "help": "The .max (32ch) and .max-p (56ch) caps (head:67-68)."
                },
                "description": "The .max (32ch) and .max-p (56ch) caps (head:67-68).",
                "type": "number",
                "exclusiveMinimum": 0
              },
              "marginTop": {
                "title": "Margin top",
                "x-inspector": {
                  "label": "Margin top",
                  "control": "number",
                  "group": "Layout"
                },
                "type": "number"
              },
              "typography": {
                "title": "Typography",
                "x-inspector": {
                  "label": "Typography",
                  "control": "typography",
                  "group": "Text",
                  "help": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default."
                },
                "description": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default.",
                "type": "object",
                "properties": {
                  "size": {
                    "title": "Size",
                    "x-inspector": {
                      "label": "Size",
                      "control": "select",
                      "snap": [
                        88,
                        72,
                        58,
                        44,
                        34,
                        26,
                        24,
                        22,
                        20,
                        18,
                        17,
                        16,
                        15
                      ],
                      "group": "Text",
                      "help": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding."
                    },
                    "description": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "weight": {
                    "title": "Weight",
                    "x-inspector": {
                      "label": "Weight",
                      "control": "select",
                      "snap": [
                        300,
                        400,
                        500,
                        600,
                        700
                      ],
                      "group": "Text",
                      "help": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md)."
                    },
                    "description": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md).",
                    "type": "number",
                    "enum": [
                      300,
                      400,
                      500,
                      600,
                      700
                    ]
                  },
                  "align": {
                    "title": "Align",
                    "x-inspector": {
                      "label": "Align",
                      "control": "select",
                      "snap": [
                        "left",
                        "center",
                        "right",
                        "justify"
                      ],
                      "group": "Text"
                    },
                    "type": "string",
                    "enum": [
                      "left",
                      "center",
                      "right",
                      "justify"
                    ]
                  },
                  "tracking": {
                    "title": "Tracking (em)",
                    "x-inspector": {
                      "label": "Tracking (em)",
                      "control": "number",
                      "snap": [
                        -0.025,
                        -0.02,
                        -0.015,
                        -0.01,
                        0,
                        0.01,
                        0.02
                      ],
                      "group": "Text",
                      "help": "Letter spacing in em; the display faces sit at -0.025 (head:58)."
                    },
                    "description": "Letter spacing in em; the display faces sit at -0.025 (head:58).",
                    "type": "number"
                  },
                  "leading": {
                    "title": "Line spacing",
                    "x-inspector": {
                      "label": "Line spacing",
                      "control": "number",
                      "snap": [
                        1,
                        1.02,
                        1.06,
                        1.08,
                        1.1,
                        1.15,
                        1.2,
                        1.25,
                        1.3,
                        1.4,
                        1.45,
                        1.5,
                        1.7,
                        2
                      ],
                      "group": "Text",
                      "help": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu."
                    },
                    "description": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "spaceBefore": {
                    "title": "Space before",
                    "x-inspector": {
                      "label": "Space before",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space above every paragraph but the first, in px."
                    },
                    "description": "Space above every paragraph but the first, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "spaceAfter": {
                    "title": "Space after",
                    "x-inspector": {
                      "label": "Space after",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space below every paragraph but the last, in px."
                    },
                    "description": "Space below every paragraph but the last, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "columns": {
                    "title": "Columns",
                    "x-inspector": {
                      "label": "Columns",
                      "control": "select",
                      "snap": [
                        1,
                        2,
                        3
                      ],
                      "group": "Text",
                      "help": "Text columns inside the block with a 40 px gap; one when absent."
                    },
                    "description": "Text columns inside the block with a 40 px gap; one when absent.",
                    "type": "number",
                    "enum": [
                      1,
                      2,
                      3
                    ]
                  },
                  "indent": {
                    "title": "Indent",
                    "x-inspector": {
                      "label": "Indent",
                      "control": "number",
                      "snap": [
                        0,
                        64,
                        128,
                        192
                      ],
                      "group": "Text",
                      "help": "The paragraphs’ left indent in px; Increase indent steps it by 64."
                    },
                    "description": "The paragraphs’ left indent in px; Increase indent steps it by 64.",
                    "type": "number",
                    "minimum": 0
                  },
                  "family": {
                    "title": "Font",
                    "x-inspector": {
                      "label": "Font",
                      "control": "select",
                      "snap": [
                        "inter",
                        "roboto",
                        "open-sans",
                        "lato",
                        "montserrat",
                        "poppins",
                        "source-sans-3",
                        "source-serif-4",
                        "merriweather",
                        "playfair-display",
                        "lora",
                        "pt-serif",
                        "libre-baskerville",
                        "eb-garamond",
                        "nunito",
                        "raleway",
                        "work-sans",
                        "dm-sans",
                        "space-grotesk",
                        "oswald",
                        "bebas-neue",
                        "roboto-mono",
                        "jetbrains-mono",
                        "ibm-plex-sans",
                        "ibm-plex-mono",
                        "fira-code",
                        "geist",
                        "geist-mono",
                        "instrument-sans",
                        "manrope",
                        "bricolage-grotesque",
                        "schibsted-grotesk",
                        "newsreader",
                        "fraunces"
                      ],
                      "group": "Text",
                      "help": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent."
                    },
                    "description": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent.",
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  },
                  "numerals": {
                    "title": "Tabular figures",
                    "x-inspector": {
                      "label": "Tabular figures",
                      "control": "toggle",
                      "snap": [
                        "tabular"
                      ],
                      "group": "Text",
                      "help": "Every digit takes the same width, so numbers line up in a column"
                    },
                    "description": "Every digit takes the same width, so numbers line up in a column",
                    "type": "string",
                    "enum": [
                      "tabular"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "autofit": {
                "title": "Text fitting",
                "x-inspector": {
                  "label": "Text fitting",
                  "control": "select",
                  "snap": [
                    "none",
                    "shrink",
                    "grow"
                  ],
                  "group": "Text",
                  "help": "Do not autofit, Shrink text on overflow (steps the size down the ladder) or Resize shape to fit text (writes the box height, positioned blocks only); an explicit write, never a render time fit."
                },
                "description": "Do not autofit, Shrink text on overflow (steps the size down the ladder) or Resize shape to fit text (writes the box height, positioned blocks only); an explicit write, never a render time fit.",
                "type": "string",
                "enum": [
                  "none",
                  "shrink",
                  "grow"
                ]
              },
              "color": {
                "title": "Color",
                "x-inspector": {
                  "label": "Color",
                  "control": "color",
                  "snap": [
                    "ink",
                    "paper",
                    "ink-2",
                    "titanium",
                    "hair",
                    "hair-soft",
                    "plate",
                    "edge",
                    "green",
                    "amber",
                    "red",
                    "blue",
                    "accent"
                  ],
                  "group": "Text",
                  "help": "The text colour; the role’s ink unless set."
                },
                "description": "The text colour; the role’s ink unless set.",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              }
            },
            "required": [
              "id",
              "type",
              "text"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "credit"
              },
              "text": {
                "type": "string",
                "title": "Credit",
                "x-inspector": {
                  "label": "Credit",
                  "control": "text",
                  "group": "Text",
                  "help": "15 px titanium on the plate; required for share-alike sources (OPENERS.md:255)."
                },
                "description": "15 px titanium on the plate; required for share-alike sources (OPENERS.md:255)."
              }
            },
            "required": [
              "id",
              "type",
              "text"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "rows"
              },
              "key": {
                "type": "number",
                "enum": [
                  90,
                  120,
                  150,
                  180,
                  190,
                  200,
                  220,
                  240,
                  250,
                  300
                ],
                "title": "Key width",
                "x-inspector": {
                  "label": "Key width",
                  "control": "select",
                  "snap": [
                    90,
                    120,
                    150,
                    180,
                    190,
                    200,
                    220,
                    240,
                    250,
                    300
                  ],
                  "group": "Layout",
                  "help": "The key column in px; 240 is the default, 180 the deck’s .narrow (head:97, 100)."
                },
                "description": "The key column in px; 240 is the default, 180 the deck’s .narrow (head:97, 100)."
              },
              "tight": {
                "title": "Tight",
                "x-inspector": {
                  "label": "Tight",
                  "control": "toggle",
                  "group": "Layout",
                  "help": "14 px row padding instead of 16 (head:101)."
                },
                "description": "14 px row padding instead of 16 (head:101).",
                "type": "boolean"
              },
              "links": {
                "title": "Link table",
                "x-inspector": {
                  "label": "Link table",
                  "control": "toggle",
                  "group": "Block",
                  "help": "Values in ink-2 with the external glyph after each link (head:198)."
                },
                "description": "Values in ink-2 with the external glyph after each link (head:198).",
                "type": "boolean"
              },
              "minRowHeight": {
                "title": "Minimum row height",
                "x-inspector": {
                  "label": "Minimum row height",
                  "control": "number",
                  "group": "Layout"
                },
                "type": "number",
                "exclusiveMinimum": 0
              },
              "items": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string",
                      "title": "Key",
                      "x-inspector": {
                        "label": "Key",
                        "control": "text",
                        "group": "Text"
                      }
                    },
                    "icon": {
                      "$ref": "#/components/schemas/Icon"
                    },
                    "value": {
                      "type": "string",
                      "title": "Value",
                      "x-inspector": {
                        "label": "Value",
                        "control": "text",
                        "group": "Text"
                      }
                    },
                    "ext": {
                      "title": "External link glyph",
                      "x-inspector": {
                        "label": "External link glyph",
                        "control": "toggle",
                        "group": "Block"
                      },
                      "type": "boolean",
                      "const": true
                    }
                  },
                  "required": [
                    "key",
                    "value"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "type",
              "key",
              "items"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "plain"
              },
              "size": {
                "title": "Size",
                "x-inspector": {
                  "label": "Size",
                  "control": "select",
                  "snap": [
                    24,
                    22,
                    20
                  ],
                  "group": "Block"
                },
                "type": "number",
                "enum": [
                  24,
                  22,
                  20
                ]
              },
              "numbered": {
                "title": "Numbered",
                "x-inspector": {
                  "label": "Numbered",
                  "control": "toggle",
                  "group": "Block",
                  "help": "A tabular numeral in the key position of every row."
                },
                "description": "A tabular numeral in the key position of every row.",
                "type": "boolean",
                "const": true
              },
              "marker": {
                "title": "Marker",
                "x-inspector": {
                  "label": "Marker",
                  "control": "select",
                  "snap": [
                    "rule",
                    "bullet",
                    "number"
                  ],
                  "group": "Block",
                  "help": "Ruled (the default), Bulleted or Numbered: glyphs or numerals per level instead of the ruled rows."
                },
                "description": "Ruled (the default), Bulleted or Numbered: glyphs or numerals per level instead of the ruled rows.",
                "type": "string",
                "enum": [
                  "rule",
                  "bullet",
                  "number"
                ]
              },
              "preset": {
                "title": "Preset",
                "x-inspector": {
                  "label": "Preset",
                  "control": "select",
                  "snap": [
                    "disc-circle-square",
                    "diamondx-arrow3d-square",
                    "checkbox",
                    "arrow-diamond-disc",
                    "star-circle-square",
                    "arrow3d-circle-square",
                    "lefttriangle-diamond-disc",
                    "diamondx-hollowdiamond-square",
                    "diamond-circle-square",
                    "digit-alpha-roman",
                    "digit-alpha-roman-parens",
                    "digit-nested",
                    "upperalpha-alpha-roman",
                    "upperroman-upperalpha-digit",
                    "zerodigit-alpha-roman"
                  ],
                  "group": "Block",
                  "help": "The bullet or numbering preset; the first of its family unless set."
                },
                "description": "The bullet or numbering preset; the first of its family unless set.",
                "type": "string",
                "enum": [
                  "disc-circle-square",
                  "diamondx-arrow3d-square",
                  "checkbox",
                  "arrow-diamond-disc",
                  "star-circle-square",
                  "arrow3d-circle-square",
                  "lefttriangle-diamond-disc",
                  "diamondx-hollowdiamond-square",
                  "diamond-circle-square",
                  "digit-alpha-roman",
                  "digit-alpha-roman-parens",
                  "digit-nested",
                  "upperalpha-alpha-roman",
                  "upperroman-upperalpha-digit",
                  "zerodigit-alpha-roman"
                ]
              },
              "typography": {
                "title": "Typography",
                "x-inspector": {
                  "label": "Typography",
                  "control": "typography",
                  "group": "Text",
                  "help": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default."
                },
                "description": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default.",
                "type": "object",
                "properties": {
                  "size": {
                    "title": "Size",
                    "x-inspector": {
                      "label": "Size",
                      "control": "select",
                      "snap": [
                        88,
                        72,
                        58,
                        44,
                        34,
                        26,
                        24,
                        22,
                        20,
                        18,
                        17,
                        16,
                        15
                      ],
                      "group": "Text",
                      "help": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding."
                    },
                    "description": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "weight": {
                    "title": "Weight",
                    "x-inspector": {
                      "label": "Weight",
                      "control": "select",
                      "snap": [
                        300,
                        400,
                        500,
                        600,
                        700
                      ],
                      "group": "Text",
                      "help": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md)."
                    },
                    "description": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md).",
                    "type": "number",
                    "enum": [
                      300,
                      400,
                      500,
                      600,
                      700
                    ]
                  },
                  "align": {
                    "title": "Align",
                    "x-inspector": {
                      "label": "Align",
                      "control": "select",
                      "snap": [
                        "left",
                        "center",
                        "right",
                        "justify"
                      ],
                      "group": "Text"
                    },
                    "type": "string",
                    "enum": [
                      "left",
                      "center",
                      "right",
                      "justify"
                    ]
                  },
                  "tracking": {
                    "title": "Tracking (em)",
                    "x-inspector": {
                      "label": "Tracking (em)",
                      "control": "number",
                      "snap": [
                        -0.025,
                        -0.02,
                        -0.015,
                        -0.01,
                        0,
                        0.01,
                        0.02
                      ],
                      "group": "Text",
                      "help": "Letter spacing in em; the display faces sit at -0.025 (head:58)."
                    },
                    "description": "Letter spacing in em; the display faces sit at -0.025 (head:58).",
                    "type": "number"
                  },
                  "leading": {
                    "title": "Line spacing",
                    "x-inspector": {
                      "label": "Line spacing",
                      "control": "number",
                      "snap": [
                        1,
                        1.02,
                        1.06,
                        1.08,
                        1.1,
                        1.15,
                        1.2,
                        1.25,
                        1.3,
                        1.4,
                        1.45,
                        1.5,
                        1.7,
                        2
                      ],
                      "group": "Text",
                      "help": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu."
                    },
                    "description": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "spaceBefore": {
                    "title": "Space before",
                    "x-inspector": {
                      "label": "Space before",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space above every paragraph but the first, in px."
                    },
                    "description": "Space above every paragraph but the first, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "spaceAfter": {
                    "title": "Space after",
                    "x-inspector": {
                      "label": "Space after",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space below every paragraph but the last, in px."
                    },
                    "description": "Space below every paragraph but the last, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "columns": {
                    "title": "Columns",
                    "x-inspector": {
                      "label": "Columns",
                      "control": "select",
                      "snap": [
                        1,
                        2,
                        3
                      ],
                      "group": "Text",
                      "help": "Text columns inside the block with a 40 px gap; one when absent."
                    },
                    "description": "Text columns inside the block with a 40 px gap; one when absent.",
                    "type": "number",
                    "enum": [
                      1,
                      2,
                      3
                    ]
                  },
                  "indent": {
                    "title": "Indent",
                    "x-inspector": {
                      "label": "Indent",
                      "control": "number",
                      "snap": [
                        0,
                        64,
                        128,
                        192
                      ],
                      "group": "Text",
                      "help": "The paragraphs’ left indent in px; Increase indent steps it by 64."
                    },
                    "description": "The paragraphs’ left indent in px; Increase indent steps it by 64.",
                    "type": "number",
                    "minimum": 0
                  },
                  "family": {
                    "title": "Font",
                    "x-inspector": {
                      "label": "Font",
                      "control": "select",
                      "snap": [
                        "inter",
                        "roboto",
                        "open-sans",
                        "lato",
                        "montserrat",
                        "poppins",
                        "source-sans-3",
                        "source-serif-4",
                        "merriweather",
                        "playfair-display",
                        "lora",
                        "pt-serif",
                        "libre-baskerville",
                        "eb-garamond",
                        "nunito",
                        "raleway",
                        "work-sans",
                        "dm-sans",
                        "space-grotesk",
                        "oswald",
                        "bebas-neue",
                        "roboto-mono",
                        "jetbrains-mono",
                        "ibm-plex-sans",
                        "ibm-plex-mono",
                        "fira-code",
                        "geist",
                        "geist-mono",
                        "instrument-sans",
                        "manrope",
                        "bricolage-grotesque",
                        "schibsted-grotesk",
                        "newsreader",
                        "fraunces"
                      ],
                      "group": "Text",
                      "help": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent."
                    },
                    "description": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent.",
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  },
                  "numerals": {
                    "title": "Tabular figures",
                    "x-inspector": {
                      "label": "Tabular figures",
                      "control": "toggle",
                      "snap": [
                        "tabular"
                      ],
                      "group": "Text",
                      "help": "Every digit takes the same width, so numbers line up in a column"
                    },
                    "description": "Every digit takes the same width, so numbers line up in a column",
                    "type": "string",
                    "enum": [
                      "tabular"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "items": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "text": {
                      "type": "string",
                      "title": "Text",
                      "x-inspector": {
                        "label": "Text",
                        "control": "text",
                        "group": "Text"
                      }
                    },
                    "icon": {
                      "$ref": "#/components/schemas/Icon"
                    },
                    "no": {
                      "title": "Struck",
                      "x-inspector": {
                        "label": "Struck",
                        "control": "toggle",
                        "group": "Block",
                        "help": "Strikes the line through in ink-2 (head:104)."
                      },
                      "description": "Strikes the line through in ink-2 (head:104).",
                      "type": "boolean",
                      "const": true
                    },
                    "level": {
                      "title": "Level",
                      "x-inspector": {
                        "label": "Level",
                        "control": "number",
                        "snap": [
                          1,
                          2,
                          3,
                          4,
                          5,
                          6,
                          7,
                          8,
                          9
                        ],
                        "group": "Block",
                        "help": "The list level, 1 to 9; the preset’s glyphs cycle from level 4."
                      },
                      "description": "The list level, 1 to 9; the preset’s glyphs cycle from level 4.",
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 9
                    }
                  },
                  "required": [
                    "text"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "type",
              "items"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "refs"
              },
              "items": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string",
                  "title": "Reference",
                  "x-inspector": {
                    "label": "Reference",
                    "control": "text",
                    "group": "Text"
                  }
                }
              }
            },
            "required": [
              "id",
              "type",
              "items"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "say"
              },
              "items": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "quote": {
                      "type": "string",
                      "title": "Quote",
                      "x-inspector": {
                        "label": "Quote",
                        "control": "text",
                        "group": "Text"
                      }
                    },
                    "note": {
                      "title": "Note",
                      "x-inspector": {
                        "label": "Note",
                        "control": "text",
                        "group": "Text"
                      },
                      "type": "string"
                    },
                    "no": {
                      "title": "Struck",
                      "x-inspector": {
                        "label": "Struck",
                        "control": "toggle",
                        "group": "Block"
                      },
                      "type": "boolean",
                      "const": true
                    }
                  },
                  "required": [
                    "quote"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "type",
              "items"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "scales"
              },
              "centerTick": {
                "title": "Center tick",
                "x-inspector": {
                  "label": "Center tick",
                  "control": "toggle",
                  "group": "Block"
                },
                "type": "boolean"
              },
              "items": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "left": {
                      "type": "string",
                      "title": "Left label",
                      "x-inspector": {
                        "label": "Left label",
                        "control": "text",
                        "group": "Text"
                      }
                    },
                    "right": {
                      "type": "string",
                      "title": "Right label",
                      "x-inspector": {
                        "label": "Right label",
                        "control": "text",
                        "group": "Text"
                      }
                    },
                    "value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "title": "Value",
                      "x-inspector": {
                        "label": "Value",
                        "control": "number",
                        "group": "Block",
                        "help": "Percent from the left end, 0 to 100, as the deck writes `left: 78%`; the marker position is derived from it (DECK-GRAMMAR.md:61; slide 8)."
                      },
                      "description": "Percent from the left end, 0 to 100, as the deck writes `left: 78%`; the marker position is derived from it (DECK-GRAMMAR.md:61; slide 8)."
                    }
                  },
                  "required": [
                    "left",
                    "right",
                    "value"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "type",
              "items"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "spec"
              },
              "weights": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "number",
                  "enum": [
                    300,
                    400,
                    500,
                    600,
                    700,
                    800
                  ]
                },
                "title": "Weights",
                "x-inspector": {
                  "label": "Weights",
                  "control": "json",
                  "snap": [
                    300,
                    400,
                    500,
                    600,
                    700,
                    800
                  ],
                  "group": "Block",
                  "help": "The specimen is the one place display weight may pass 500 (DECK-GRAMMAR.md:20)."
                },
                "description": "The specimen is the one place display weight may pass 500 (DECK-GRAMMAR.md:20)."
              },
              "sample": {
                "type": "string",
                "title": "Sample",
                "x-inspector": {
                  "label": "Sample",
                  "control": "text",
                  "group": "Text"
                }
              },
              "textRow": {
                "title": "Text row",
                "x-inspector": {
                  "label": "Text row",
                  "control": "text",
                  "group": "Text"
                },
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "weights",
              "sample"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "lang"
              },
              "items": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "script": {
                      "type": "string",
                      "minLength": 1,
                      "title": "Script",
                      "x-inspector": {
                        "label": "Script",
                        "control": "select",
                        "snap": [
                          "latin",
                          "ja",
                          "zh",
                          "ko",
                          "ar",
                          "hi"
                        ],
                        "group": "Block",
                        "help": "ja, zh and ko take the CJK stack, ar the Arabic stack, hi the Indic stack (head:138-140)."
                      },
                      "description": "ja, zh and ko take the CJK stack, ar the Arabic stack, hi the Indic stack (head:138-140)."
                    },
                    "text": {
                      "type": "string",
                      "title": "Text",
                      "x-inspector": {
                        "label": "Text",
                        "control": "text",
                        "group": "Text"
                      }
                    },
                    "label": {
                      "type": "string",
                      "title": "Label",
                      "x-inspector": {
                        "label": "Label",
                        "control": "text",
                        "group": "Text"
                      }
                    }
                  },
                  "required": [
                    "script",
                    "text",
                    "label"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "type",
              "items"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "ladder"
              },
              "rows": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "size": {
                      "type": "number",
                      "exclusiveMinimum": 0,
                      "title": "Size",
                      "x-inspector": {
                        "label": "Size",
                        "control": "number",
                        "group": "Block"
                      }
                    },
                    "label": {
                      "type": "string",
                      "title": "Label",
                      "x-inspector": {
                        "label": "Label",
                        "control": "text",
                        "group": "Text"
                      }
                    }
                  },
                  "required": [
                    "size",
                    "label"
                  ],
                  "additionalProperties": false
                }
              },
              "valueWidth": {
                "title": "Value column",
                "x-inspector": {
                  "label": "Value column",
                  "control": "select",
                  "snap": [
                    200,
                    320
                  ],
                  "group": "Layout"
                },
                "type": "number",
                "enum": [
                  200,
                  320
                ]
              }
            },
            "required": [
              "id",
              "type",
              "rows"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "swatches"
              },
              "items": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "title": "Name",
                      "x-inspector": {
                        "label": "Name",
                        "control": "text",
                        "group": "Text"
                      }
                    },
                    "value": {
                      "type": "string",
                      "title": "Value",
                      "x-inspector": {
                        "label": "Value",
                        "control": "text",
                        "group": "Text"
                      }
                    },
                    "plate": {
                      "type": "string",
                      "enum": [
                        "ink",
                        "raised",
                        "ti",
                        "paper",
                        "outline"
                      ],
                      "title": "Plate",
                      "x-inspector": {
                        "label": "Plate",
                        "control": "select",
                        "snap": [
                          "ink",
                          "raised",
                          "ti",
                          "paper",
                          "outline"
                        ],
                        "group": "Block"
                      }
                    }
                  },
                  "required": [
                    "name",
                    "value",
                    "plate"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "type",
              "items"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "shot"
              },
              "asset": {
                "anyOf": [
                  {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  {
                    "type": "string",
                    "const": ""
                  }
                ],
                "title": "Asset",
                "x-inspector": {
                  "label": "Asset",
                  "control": "asset",
                  "group": "Asset"
                }
              },
              "fit": {
                "title": "Fit",
                "x-inspector": {
                  "label": "Fit",
                  "control": "select",
                  "snap": [
                    "width",
                    "fit"
                  ],
                  "group": "Layout",
                  "help": "width fills the slot; fit keeps the image inside the slot on both axes (head:88-89)."
                },
                "description": "width fills the slot; fit keeps the image inside the slot on both axes (head:88-89).",
                "type": "string",
                "enum": [
                  "width",
                  "fit"
                ]
              },
              "aspect": {
                "title": "Aspect",
                "x-inspector": {
                  "label": "Aspect",
                  "control": "text",
                  "group": "Layout",
                  "help": "A CSS aspect ratio such as 1440 / 864; the image is cropped to it with object-fit cover."
                },
                "description": "A CSS aspect ratio such as 1440 / 864; the image is cropped to it with object-fit cover.",
                "type": "string",
                "pattern": "^\\d+(\\.\\d+)?\\s*\\/\\s*\\d+(\\.\\d+)?$"
              },
              "crop": {
                "title": "Crop anchor",
                "x-inspector": {
                  "label": "Crop anchor",
                  "control": "select",
                  "snap": [
                    "top",
                    "center"
                  ],
                  "group": "Layout"
                },
                "type": "string",
                "enum": [
                  "top",
                  "center"
                ]
              },
              "caption": {
                "title": "Caption",
                "x-inspector": {
                  "label": "Caption",
                  "control": "textarea",
                  "group": "Text"
                },
                "type": "string"
              },
              "captionSize": {
                "title": "Caption size",
                "x-inspector": {
                  "label": "Caption size",
                  "control": "select",
                  "snap": [
                    16,
                    15
                  ],
                  "group": "Block",
                  "help": "The two caption sizes the deck uses (report 03 section 11 item 9)."
                },
                "description": "The two caption sizes the deck uses (report 03 section 11 item 9).",
                "type": "number",
                "enum": [
                  16,
                  15
                ]
              },
              "width": {
                "title": "Width",
                "x-inspector": {
                  "label": "Width",
                  "control": "number",
                  "group": "Layout"
                },
                "type": "number",
                "exclusiveMinimum": 0
              },
              "border": {
                "title": "Border",
                "x-inspector": {
                  "label": "Border",
                  "control": "toggle",
                  "group": "Block",
                  "help": "Required when the asset has one neutral twin (DECK-GRAMMAR.md:56)."
                },
                "description": "Required when the asset has one neutral twin (DECK-GRAMMAR.md:56).",
                "type": "boolean"
              },
              "trim": {
                "title": "Crop",
                "x-inspector": {
                  "label": "Crop",
                  "control": "json",
                  "group": "Layout",
                  "help": "The crop offsets as fractions of the picture: { left, right, top, bottom }."
                },
                "description": "The crop offsets as fractions of the picture: { left, right, top, bottom }.",
                "type": "object",
                "properties": {
                  "left": {
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 1
                  },
                  "right": {
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 1
                  },
                  "top": {
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 1
                  },
                  "bottom": {
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 1
                  }
                },
                "required": [
                  "left",
                  "right",
                  "top",
                  "bottom"
                ],
                "additionalProperties": false
              },
              "mask": {
                "title": "Mask",
                "x-inspector": {
                  "label": "Mask",
                  "control": "select",
                  "snap": [
                    "rect",
                    "roundRect",
                    "snip1Rect",
                    "snip2SameRect",
                    "snip2DiagRect",
                    "snipRoundRect",
                    "round1Rect",
                    "round2SameRect",
                    "round2DiagRect",
                    "ellipse",
                    "triangle",
                    "rtTriangle",
                    "parallelogram",
                    "trapezoid",
                    "diamond",
                    "pentagon",
                    "hexagon",
                    "heptagon",
                    "octagon",
                    "decagon",
                    "dodecagon",
                    "pie",
                    "chord",
                    "teardrop",
                    "frame",
                    "halfFrame",
                    "corner",
                    "diagStripe",
                    "plus",
                    "plaque",
                    "can",
                    "cube",
                    "bevel",
                    "donut",
                    "noSmoking",
                    "blockArc",
                    "foldedCorner",
                    "smileyFace",
                    "heart",
                    "lightningBolt",
                    "sun",
                    "moon",
                    "cloud",
                    "arc",
                    "bracketPair",
                    "bracePair",
                    "leftBracket",
                    "rightBracket",
                    "leftBrace",
                    "rightBrace",
                    "flowChartProcess",
                    "flowChartAlternateProcess",
                    "flowChartDecision",
                    "flowChartInputOutput",
                    "flowChartPredefinedProcess",
                    "flowChartInternalStorage",
                    "flowChartDocument",
                    "flowChartMultidocument",
                    "flowChartTerminator",
                    "flowChartPreparation",
                    "flowChartManualInput",
                    "flowChartManualOperation",
                    "flowChartConnector",
                    "flowChartOffpageConnector",
                    "flowChartPunchedCard",
                    "flowChartPunchedTape",
                    "flowChartSummingJunction",
                    "flowChartOr",
                    "flowChartCollate",
                    "flowChartSort",
                    "flowChartExtract",
                    "flowChartMerge",
                    "flowChartOfflineStorage",
                    "flowChartOnlineStorage",
                    "flowChartMagneticTape",
                    "flowChartMagneticDisk",
                    "flowChartMagneticDrum",
                    "flowChartDelay",
                    "flowChartDisplay",
                    "star4",
                    "star5",
                    "star6",
                    "star7",
                    "star8",
                    "star10",
                    "star12",
                    "star16",
                    "star24",
                    "star32",
                    "irregularSeal1",
                    "irregularSeal2",
                    "ribbon",
                    "ribbon2",
                    "ellipseRibbon",
                    "ellipseRibbon2",
                    "verticalScroll",
                    "horizontalScroll",
                    "wave",
                    "doubleWave",
                    "rightArrow",
                    "leftArrow",
                    "upArrow",
                    "downArrow",
                    "leftRightArrow",
                    "upDownArrow",
                    "quadArrow",
                    "leftRightUpArrow",
                    "bentArrow",
                    "uturnArrow",
                    "leftUpArrow",
                    "bentUpArrow",
                    "curvedRightArrow",
                    "curvedLeftArrow",
                    "curvedUpArrow",
                    "curvedDownArrow",
                    "stripedRightArrow",
                    "notchedRightArrow",
                    "homePlate",
                    "chevron",
                    "rightArrowCallout",
                    "downArrowCallout",
                    "leftArrowCallout",
                    "upArrowCallout",
                    "leftRightArrowCallout",
                    "quadArrowCallout",
                    "wedgeRectCallout",
                    "wedgeRoundRectCallout",
                    "wedgeEllipseCallout",
                    "cloudCallout",
                    "mathPlus",
                    "mathMinus",
                    "mathMultiply",
                    "mathDivide",
                    "mathEqual",
                    "mathNotEqual"
                  ],
                  "group": "Layout",
                  "help": "A closed shape the picture is clipped to."
                },
                "description": "A closed shape the picture is clipped to.",
                "type": "string"
              },
              "adjust": {
                "title": "Adjustments",
                "x-inspector": {
                  "label": "Adjustments",
                  "control": "json",
                  "group": "Block",
                  "help": "Transparency 0 to 1, brightness and contrast -1 to 1."
                },
                "description": "Transparency 0 to 1, brightness and contrast -1 to 1.",
                "type": "object",
                "properties": {
                  "transparency": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "brightness": {
                    "type": "number",
                    "minimum": -1,
                    "maximum": 1
                  },
                  "contrast": {
                    "type": "number",
                    "minimum": -1,
                    "maximum": 1
                  }
                },
                "additionalProperties": false
              },
              "frame": {
                "title": "Frame",
                "x-inspector": {
                  "label": "Frame",
                  "control": "json",
                  "group": "Block",
                  "help": "The picture’s border: weight, colour and dash."
                },
                "description": "The picture’s border: weight, colour and dash.",
                "type": "object",
                "properties": {
                  "weight": {
                    "type": "number",
                    "enum": [
                      1,
                      1.5,
                      2,
                      3,
                      4,
                      8,
                      12
                    ]
                  },
                  "color": {
                    "title": "Frame color",
                    "x-inspector": {
                      "label": "Frame color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The frame colour; the hairline token unless set."
                    },
                    "description": "The frame colour; the hairline token unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "dash": {
                    "title": "Dash",
                    "x-inspector": {
                      "label": "Dash",
                      "control": "select",
                      "snap": [
                        "solid",
                        "dot",
                        "dash",
                        "dashDot",
                        "longDash",
                        "longDashDot"
                      ],
                      "group": "Block",
                      "help": "Solid, dot, dash, dash dot, long dash or long dash dot."
                    },
                    "description": "Solid, dot, dash, dash dot, long dash or long dash dot.",
                    "type": "string",
                    "enum": [
                      "solid",
                      "dot",
                      "dash",
                      "dashDot",
                      "longDash",
                      "longDashDot"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "shadow": {
                "title": "Drop shadow",
                "x-inspector": {
                  "label": "Drop shadow",
                  "control": "json",
                  "group": "Block",
                  "help": "The drop shadow: colour, transparency, angle, distance and blur."
                },
                "description": "The drop shadow: colour, transparency, angle, distance and blur.",
                "type": "object",
                "properties": {
                  "color": {
                    "title": "Shadow color",
                    "x-inspector": {
                      "label": "Shadow color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The shadow’s colour; the ink unless set."
                    },
                    "description": "The shadow’s colour; the ink unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "opacity": {
                    "title": "Transparency",
                    "x-inspector": {
                      "label": "Transparency",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s opacity 0 to 1; 0.3 unless set."
                    },
                    "description": "The shadow’s opacity 0 to 1; 0.3 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "angle": {
                    "title": "Angle",
                    "x-inspector": {
                      "label": "Angle",
                      "control": "number",
                      "group": "Block",
                      "help": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set."
                    },
                    "description": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "distance": {
                    "title": "Distance",
                    "x-inspector": {
                      "label": "Distance",
                      "control": "number",
                      "group": "Block",
                      "help": "How far the shadow falls, in px; 8 unless set."
                    },
                    "description": "How far the shadow falls, in px; 8 unless set.",
                    "type": "number",
                    "minimum": 0
                  },
                  "blur": {
                    "title": "Blur radius",
                    "x-inspector": {
                      "label": "Blur radius",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s blur in px; 12 unless set."
                    },
                    "description": "The shadow’s blur in px; 12 unless set.",
                    "type": "number",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              },
              "dither": {
                "title": "Dither",
                "x-inspector": {
                  "label": "Dither",
                  "control": "json",
                  "group": "Block",
                  "help": "The deck’s two tone screen over the picture’s continuous source; present means on."
                },
                "description": "The deck’s two tone screen over the picture’s continuous source; present means on.",
                "type": "object",
                "properties": {
                  "pattern": {
                    "type": "string",
                    "enum": [
                      "bayer8",
                      "bayer4",
                      "blue64",
                      "random"
                    ],
                    "title": "Pattern",
                    "x-inspector": {
                      "label": "Pattern",
                      "control": "select",
                      "snap": [
                        "bayer8",
                        "bayer4",
                        "blue64",
                        "random"
                      ],
                      "group": "Block",
                      "help": "The threshold texture; Bayer 8 by 8 is the deck’s two tone screen."
                    },
                    "description": "The threshold texture; Bayer 8 by 8 is the deck’s two tone screen."
                  },
                  "tone": {
                    "title": "Tone",
                    "x-inspector": {
                      "label": "Tone",
                      "control": "select",
                      "snap": [
                        "two",
                        "three",
                        "original"
                      ],
                      "group": "Block",
                      "help": "Ink and paper (two), three tones with titanium in the middle, or the picture’s own colours posterised (original)."
                    },
                    "description": "Ink and paper (two), three tones with titanium in the middle, or the picture’s own colours posterised (original).",
                    "type": "string",
                    "enum": [
                      "two",
                      "three",
                      "original"
                    ]
                  },
                  "steps": {
                    "title": "Steps",
                    "x-inspector": {
                      "label": "Steps",
                      "control": "number",
                      "snap": [
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                      ],
                      "group": "Block",
                      "help": "The colour steps for the original tone, 2 to 7; 4 unless set."
                    },
                    "description": "The colour steps for the original tone, 2 to 7; 4 unless set.",
                    "type": "integer",
                    "minimum": 2,
                    "maximum": 7
                  },
                  "cell": {
                    "title": "Cell",
                    "x-inspector": {
                      "label": "Cell",
                      "control": "select",
                      "snap": [
                        1,
                        2,
                        3,
                        4
                      ],
                      "group": "Block",
                      "help": "Sheet pixels per cell; 2 is the deck’s cell."
                    },
                    "description": "Sheet pixels per cell; 2 is the deck’s cell.",
                    "type": "number",
                    "enum": [
                      1,
                      2,
                      3,
                      4
                    ]
                  },
                  "strength": {
                    "title": "Strength",
                    "x-inspector": {
                      "label": "Strength",
                      "control": "number",
                      "group": "Block",
                      "help": "The dithered plane’s opacity over the continuous picture, 0 to 1; 1 is the pure two tone."
                    },
                    "description": "The dithered plane’s opacity over the continuous picture, 0 to 1; 1 is the pure two tone.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "black": {
                    "title": "Black point",
                    "x-inspector": {
                      "label": "Black point",
                      "control": "number",
                      "group": "Block",
                      "help": "Values at or below it become ink; 0 unless set, 120 in the Photograph preset."
                    },
                    "description": "Values at or below it become ink; 0 unless set, 120 in the Photograph preset.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 255
                  },
                  "white": {
                    "title": "White point",
                    "x-inspector": {
                      "label": "White point",
                      "control": "number",
                      "group": "Block",
                      "help": "Values at or above it become paper; 255 unless set, 230 in the Photograph preset."
                    },
                    "description": "Values at or above it become paper; 255 unless set, 230 in the Photograph preset.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 255
                  },
                  "gamma": {
                    "title": "Gamma",
                    "x-inspector": {
                      "label": "Gamma",
                      "control": "number",
                      "group": "Block",
                      "help": "The midtones, 0.5 to 2; below 1 lifts them; 1 unless set, 0.9 in the Photograph preset."
                    },
                    "description": "The midtones, 0.5 to 2; below 1 lifts them; 1 unless set, 0.9 in the Photograph preset.",
                    "type": "number",
                    "minimum": 0.5,
                    "maximum": 2
                  },
                  "invert": {
                    "title": "Invert",
                    "x-inspector": {
                      "label": "Invert",
                      "control": "toggle",
                      "group": "Block",
                      "help": "Inverts the source before the tone stages, for a light render."
                    },
                    "description": "Inverts the source before the tone stages, for a light render.",
                    "type": "boolean"
                  },
                  "polarity": {
                    "title": "Polarity",
                    "x-inspector": {
                      "label": "Polarity",
                      "control": "select",
                      "snap": [
                        "auto",
                        "dark-ground",
                        "light-ground",
                        "same"
                      ],
                      "group": "Block",
                      "help": "Which theme the positive image serves; auto picks dark ground when the lit fraction is under 0.5; same writes one neutral variant."
                    },
                    "description": "Which theme the positive image serves; auto picks dark ground when the lit fraction is under 0.5; same writes one neutral variant.",
                    "type": "string",
                    "enum": [
                      "auto",
                      "dark-ground",
                      "light-ground",
                      "same"
                    ]
                  },
                  "blur": {
                    "title": "Blur",
                    "x-inspector": {
                      "label": "Blur",
                      "control": "number",
                      "group": "Advanced",
                      "help": "A blur in source pixels of the 1800 px scaled source, 0 to 8."
                    },
                    "description": "A blur in source pixels of the 1800 px scaled source, 0 to 8.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 8
                  },
                  "minFilter": {
                    "title": "Thicken",
                    "x-inspector": {
                      "label": "Thicken",
                      "control": "number",
                      "group": "Advanced",
                      "help": "A minimum filter radius in source pixels, 0 to 9."
                    },
                    "description": "A minimum filter radius in source pixels, 0 to 9.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 9
                  },
                  "channel": {
                    "title": "Channel",
                    "x-inspector": {
                      "label": "Channel",
                      "control": "select",
                      "snap": [
                        "gray",
                        "r",
                        "g",
                        "b"
                      ],
                      "group": "Advanced",
                      "help": "The channel read as the tone; gray unless set."
                    },
                    "description": "The channel read as the tone; gray unless set.",
                    "type": "string",
                    "enum": [
                      "gray",
                      "r",
                      "g",
                      "b"
                    ]
                  },
                  "seed": {
                    "title": "Seed",
                    "x-inspector": {
                      "label": "Seed",
                      "control": "number",
                      "group": "Advanced",
                      "help": "The hash seed of the random pattern, a 32 bit integer; 0 unless set so two writers agree."
                    },
                    "description": "The hash seed of the random pattern, a 32 bit integer; 0 unless set so two writers agree.",
                    "type": "integer",
                    "minimum": -2147483648,
                    "maximum": 2147483647
                  }
                },
                "required": [
                  "pattern"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "type",
              "asset"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "pair"
              },
              "ratio": {
                "title": "Ratio",
                "x-inspector": {
                  "label": "Ratio",
                  "control": "json",
                  "group": "Layout"
                },
                "anyOf": [
                  {
                    "type": "string",
                    "const": "1/1"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "left": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "right": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      }
                    },
                    "required": [
                      "left",
                      "right"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "gap": {
                "title": "Gap",
                "x-inspector": {
                  "label": "Gap",
                  "control": "select",
                  "snap": [
                    28,
                    40
                  ],
                  "group": "Layout"
                },
                "type": "number",
                "enum": [
                  28,
                  40
                ]
              },
              "captionSize": {
                "title": "Caption size",
                "x-inspector": {
                  "label": "Caption size",
                  "control": "select",
                  "snap": [
                    16,
                    15
                  ],
                  "group": "Block",
                  "help": "The two caption sizes the deck uses (report 03 section 11 item 9)."
                },
                "description": "The two caption sizes the deck uses (report 03 section 11 item 9).",
                "type": "number",
                "enum": [
                  16,
                  15
                ]
              },
              "figures": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "assets": {
                      "minItems": 1,
                      "type": "array",
                      "items": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "const": ""
                          }
                        ],
                        "title": "Asset",
                        "x-inspector": {
                          "label": "Asset",
                          "control": "asset",
                          "group": "Asset"
                        }
                      }
                    },
                    "caption": {
                      "title": "Caption",
                      "x-inspector": {
                        "label": "Caption",
                        "control": "textarea",
                        "group": "Text"
                      },
                      "type": "string"
                    }
                  },
                  "required": [
                    "assets"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "type",
              "figures"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "tiles"
              },
              "columns": {
                "type": "number",
                "enum": [
                  4,
                  5,
                  6
                ],
                "title": "Columns",
                "x-inspector": {
                  "label": "Columns",
                  "control": "select",
                  "snap": [
                    4,
                    5,
                    6
                  ],
                  "group": "Layout"
                }
              },
              "aspect": {
                "type": "string",
                "enum": [
                  "16/9",
                  "16/10",
                  "1/1"
                ],
                "title": "Tile aspect",
                "x-inspector": {
                  "label": "Tile aspect",
                  "control": "select",
                  "snap": [
                    "16/9",
                    "16/10",
                    "1/1"
                  ],
                  "group": "Layout"
                }
              },
              "labelSize": {
                "title": "Label size",
                "x-inspector": {
                  "label": "Label size",
                  "control": "select",
                  "snap": [
                    15,
                    20
                  ],
                  "group": "Block"
                },
                "type": "number",
                "enum": [
                  15,
                  20
                ]
              },
              "items": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "asset": {
                      "anyOf": [
                        {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        },
                        {
                          "type": "string",
                          "const": ""
                        }
                      ],
                      "title": "Asset",
                      "x-inspector": {
                        "label": "Asset",
                        "control": "asset",
                        "group": "Asset"
                      }
                    },
                    "label": {
                      "title": "Label",
                      "x-inspector": {
                        "label": "Label",
                        "control": "text",
                        "group": "Text"
                      },
                      "type": "string"
                    },
                    "sub": {
                      "title": "Sub label",
                      "x-inspector": {
                        "label": "Sub label",
                        "control": "text",
                        "group": "Text"
                      },
                      "type": "string"
                    },
                    "marker": {
                      "title": "Marker",
                      "x-inspector": {
                        "label": "Marker",
                        "control": "toggle",
                        "group": "Block"
                      },
                      "type": "boolean",
                      "const": true
                    }
                  },
                  "additionalProperties": false
                }
              },
              "more": {
                "title": "More",
                "x-inspector": {
                  "label": "More",
                  "control": "text",
                  "group": "Text",
                  "help": "A closing line such as \"and 12 more\"."
                },
                "description": "A closing line such as \"and 12 more\".",
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "columns",
              "aspect",
              "items"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "details"
              },
              "columns": {
                "type": "number",
                "const": 3,
                "title": "Columns",
                "x-inspector": {
                  "label": "Columns",
                  "control": "readonly",
                  "group": "Layout"
                }
              },
              "rowHeights": {
                "title": "Row heights",
                "x-inspector": {
                  "label": "Row heights",
                  "control": "json",
                  "group": "Layout",
                  "help": "One height per row of crops; the deck uses 140 and 236 (slide 38) or 425 (slide 65)."
                },
                "description": "One height per row of crops; the deck uses 140 and 236 (slide 38) or 425 (slide 65).",
                "type": "array",
                "items": {
                  "type": "number",
                  "exclusiveMinimum": 0
                }
              },
              "items": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "asset": {
                      "anyOf": [
                        {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        },
                        {
                          "type": "string",
                          "const": ""
                        }
                      ],
                      "title": "Asset",
                      "x-inspector": {
                        "label": "Asset",
                        "control": "asset",
                        "group": "Asset"
                      }
                    },
                    "caption": {
                      "title": "Caption",
                      "x-inspector": {
                        "label": "Caption",
                        "control": "textarea",
                        "group": "Text"
                      },
                      "type": "string"
                    }
                  },
                  "required": [
                    "asset"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "type",
              "columns",
              "items"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "board"
              },
              "columns": {
                "type": "array",
                "prefixItems": [
                  {
                    "type": "number",
                    "const": 128
                  },
                  {
                    "type": "number",
                    "const": 250
                  },
                  {
                    "type": "number",
                    "const": 200
                  },
                  {
                    "type": "string",
                    "const": "fr"
                  }
                ],
                "items": false,
                "minItems": 4,
                "maxItems": 4,
                "title": "Columns",
                "x-inspector": {
                  "label": "Columns",
                  "control": "readonly",
                  "group": "Layout",
                  "help": "A 128 by 72 capture, the surface and its address, the state, the note (slide 80)."
                },
                "description": "A 128 by 72 capture, the surface and its address, the state, the note (slide 80)."
              },
              "rows": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "asset": {
                      "anyOf": [
                        {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        },
                        {
                          "type": "string",
                          "const": ""
                        }
                      ],
                      "title": "Asset",
                      "x-inspector": {
                        "label": "Asset",
                        "control": "asset",
                        "group": "Asset"
                      }
                    },
                    "name": {
                      "type": "string",
                      "title": "Name",
                      "x-inspector": {
                        "label": "Name",
                        "control": "text",
                        "group": "Text"
                      }
                    },
                    "address": {
                      "title": "Address",
                      "x-inspector": {
                        "label": "Address",
                        "control": "text",
                        "group": "Text"
                      },
                      "type": "string"
                    },
                    "state": {
                      "$ref": "#/components/schemas/Icon"
                    },
                    "note": {
                      "type": "string",
                      "title": "Note",
                      "x-inspector": {
                        "label": "Note",
                        "control": "textarea",
                        "group": "Text"
                      }
                    }
                  },
                  "required": [
                    "name",
                    "state",
                    "note"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "type",
              "columns",
              "rows"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "composite"
              },
              "tracks": {
                "type": "string",
                "minLength": 1,
                "title": "Tracks",
                "x-inspector": {
                  "label": "Tracks",
                  "control": "text",
                  "group": "Layout",
                  "help": "A CSS grid-template-columns value; M5 retires the last html escapes with it."
                },
                "description": "A CSS grid-template-columns value; M5 retires the last html escapes with it."
              },
              "gap": {
                "title": "Gap",
                "x-inspector": {
                  "label": "Gap",
                  "control": "number",
                  "group": "Layout"
                },
                "type": "number",
                "minimum": 0
              },
              "justify": {
                "title": "Justify tracks",
                "x-inspector": {
                  "label": "Justify tracks",
                  "control": "select",
                  "snap": [
                    "start",
                    "space-between"
                  ],
                  "group": "Layout",
                  "help": "space-between spreads fixed tracks across the slot, the deck’s `justify-content` (s25:8)."
                },
                "description": "space-between spreads fixed tracks across the slot, the deck’s `justify-content` (s25:8).",
                "type": "string",
                "enum": [
                  "start",
                  "space-between"
                ]
              },
              "align": {
                "title": "Align cells",
                "x-inspector": {
                  "label": "Align cells",
                  "control": "select",
                  "snap": [
                    "start",
                    "center",
                    "end",
                    "stretch"
                  ],
                  "group": "Layout",
                  "help": "The grid’s align-items; start keeps a short cell at the top of its row (s67:5, s83:5)."
                },
                "description": "The grid’s align-items; start keeps a short cell at the top of its row (s67:5, s83:5).",
                "type": "string",
                "enum": [
                  "start",
                  "center",
                  "end",
                  "stretch"
                ]
              },
              "caption": {
                "title": "Caption",
                "x-inspector": {
                  "label": "Caption",
                  "control": "textarea",
                  "group": "Text",
                  "help": "Renders the composite as a figure with this figcaption (s67:6, s84:16)."
                },
                "description": "Renders the composite as a figure with this figcaption (s67:6, s84:16).",
                "type": "string"
              },
              "captionSize": {
                "title": "Caption size",
                "x-inspector": {
                  "label": "Caption size",
                  "control": "select",
                  "snap": [
                    16,
                    15
                  ],
                  "group": "Block",
                  "help": "The two caption sizes the deck uses (report 03 section 11 item 9)."
                },
                "description": "The two caption sizes the deck uses (report 03 section 11 item 9).",
                "type": "number",
                "enum": [
                  16,
                  15
                ]
              },
              "cells": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "blocks": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Block"
                      }
                    },
                    "span": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "blocks"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "type",
              "tracks",
              "cells"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "panel"
              },
              "code": {
                "type": "string",
                "title": "Code",
                "x-inspector": {
                  "label": "Code",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The one string where \\n is honored; white monospace on the #101010 panel (head:171)."
                },
                "description": "The one string where \\n is honored; white monospace on the #101010 panel (head:171)."
              },
              "size": {
                "title": "Size",
                "x-inspector": {
                  "label": "Size",
                  "control": "select",
                  "snap": [
                    17,
                    15
                  ],
                  "group": "Block"
                },
                "type": "number",
                "enum": [
                  17,
                  15
                ]
              },
              "pre": {
                "title": "Preformatted",
                "x-inspector": {
                  "label": "Preformatted",
                  "control": "toggle",
                  "group": "Block"
                },
                "type": "boolean"
              },
              "term": {
                "title": "Terminal",
                "x-inspector": {
                  "label": "Terminal",
                  "control": "toggle",
                  "group": "Block"
                },
                "type": "boolean"
              },
              "marks": {
                "title": "Marks",
                "x-inspector": {
                  "label": "Marks",
                  "control": "toggle",
                  "group": "Block",
                  "help": "Renders standalone GT inside the panel as the mark; off by default (gt-mark-in-text exclusions)."
                },
                "description": "Renders standalone GT inside the panel as the mark; off by default (gt-mark-in-text exclusions).",
                "type": "boolean",
                "const": true
              }
            },
            "required": [
              "id",
              "type",
              "code"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "type": "string",
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "text",
                  "group": "Text",
                  "help": "Empty for a decorative diagram; the renderer then writes aria-hidden, as the deck does (slide 6)."
                },
                "description": "Empty for a decorative diagram; the renderer then writes aria-hidden, as the deck does (slide 6)."
              },
              "type": {
                "type": "string",
                "const": "dia"
              },
              "fit": {
                "anyOf": [
                  {
                    "type": "string",
                    "const": "slot"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "viewBox": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          }
                        ],
                        "items": false,
                        "minItems": 4,
                        "maxItems": 4
                      }
                    },
                    "required": [
                      "viewBox"
                    ],
                    "additionalProperties": false
                  }
                ],
                "title": "Fit",
                "x-inspector": {
                  "label": "Fit",
                  "control": "json",
                  "group": "Layout",
                  "help": "slot sizes the viewBox from the slot width so one unit is one sheet pixel (SPEC 5.2)."
                },
                "description": "slot sizes the viewBox from the slot width so one unit is one sheet pixel (SPEC 5.2)."
              },
              "data": {
                "type": "object",
                "properties": {
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "lines": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "x1": {
                          "type": "number"
                        },
                        "y1": {
                          "type": "number"
                        },
                        "x2": {
                          "type": "number"
                        },
                        "y2": {
                          "type": "number"
                        },
                        "stroke": {
                          "type": "string",
                          "enum": [
                            "ink",
                            "mid",
                            "hair"
                          ]
                        },
                        "width": {
                          "type": "number",
                          "enum": [
                            1,
                            1.5
                          ]
                        }
                      },
                      "required": [
                        "x1",
                        "y1",
                        "x2",
                        "y2",
                        "stroke"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "rects": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number"
                        },
                        "y": {
                          "type": "number"
                        },
                        "w": {
                          "type": "number"
                        },
                        "h": {
                          "type": "number"
                        },
                        "fill": {
                          "type": "string",
                          "enum": [
                            "ink",
                            "paper",
                            "plate",
                            "none"
                          ]
                        },
                        "stroke": {
                          "type": "string",
                          "enum": [
                            "ink",
                            "mid",
                            "hair"
                          ]
                        },
                        "opacity": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 1
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "w",
                        "h",
                        "fill"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "markers": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number"
                        },
                        "y": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "x",
                        "y"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "texts": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number"
                        },
                        "y": {
                          "type": "number"
                        },
                        "text": {
                          "type": "string"
                        },
                        "size": {
                          "type": "number",
                          "enum": [
                            20,
                            26,
                            18
                          ]
                        },
                        "anchor": {
                          "type": "string",
                          "enum": [
                            "start",
                            "middle",
                            "end"
                          ]
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "text",
                        "size"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "icons": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "enum": [
                            "gt-mark",
                            "check-circle",
                            "x-circle",
                            "clock",
                            "exclamation-circle",
                            "arrow-top-right-on-square",
                            "arrow-right",
                            "arrow-up",
                            "swatch",
                            "document-text",
                            "sparkles",
                            "globe-alt",
                            "signal",
                            "folder",
                            "presentation-chart-bar",
                            "play",
                            "arrows-right-left",
                            "arrows-up-down",
                            "archive-box",
                            "bolt",
                            "rectangle-stack",
                            "list-bullet",
                            "photo",
                            "cube",
                            "map",
                            "key",
                            "lock-open",
                            "star",
                            "book-open",
                            "squares-2x2",
                            "code-bracket",
                            "command-line",
                            "building-office-2",
                            "briefcase",
                            "user-group",
                            "user-circle",
                            "scale",
                            "finger-print",
                            "eye",
                            "eye-slash",
                            "pencil-square",
                            "chat-bubble-left-right",
                            "clipboard-document-check",
                            "wrench-screwdriver",
                            "cog-6-tooth",
                            "pause-circle",
                            "adjustments-horizontal",
                            "plus",
                            "device-phone-mobile",
                            "language",
                            "table-cells",
                            "envelope",
                            "server",
                            "paint-brush",
                            "home",
                            "tag",
                            "newspaper",
                            "magnifying-glass",
                            "rocket-launch",
                            "check-badge",
                            "beaker",
                            "bars-3",
                            "view-columns",
                            "identification",
                            "lock-closed",
                            "bars-3-bottom-left",
                            "bars-3-center-left",
                            "bars-3-bottom-right",
                            "bell",
                            "inbox",
                            "cursor-arrow-rays",
                            "arrow-down-tray"
                          ]
                        },
                        "x": {
                          "type": "number"
                        },
                        "y": {
                          "type": "number"
                        },
                        "size": {
                          "type": "number",
                          "enum": [
                            24,
                            20
                          ]
                        },
                        "color": {
                          "type": "string",
                          "enum": [
                            "ok",
                            "warn",
                            "no",
                            "info"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "x",
                        "y",
                        "size"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "marks": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number"
                        },
                        "y": {
                          "type": "number"
                        },
                        "w": {
                          "type": "number"
                        },
                        "h": {
                          "type": "number"
                        },
                        "iso": {
                          "type": "boolean",
                          "const": true
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "w",
                        "h"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "polygons": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "points": {
                          "minItems": 3,
                          "type": "array",
                          "items": {
                            "type": "array",
                            "prefixItems": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "number"
                              }
                            ],
                            "items": false,
                            "minItems": 2,
                            "maxItems": 2
                          }
                        },
                        "fill": {
                          "type": "string",
                          "enum": [
                            "ink",
                            "paper",
                            "plate",
                            "none"
                          ]
                        },
                        "opacity": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 1
                        },
                        "stroke": {
                          "type": "string",
                          "enum": [
                            "ink",
                            "mid",
                            "hair"
                          ]
                        },
                        "width": {
                          "type": "number",
                          "enum": [
                            1,
                            1.5
                          ]
                        }
                      },
                      "required": [
                        "points",
                        "fill"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "w",
                  "h",
                  "lines",
                  "rects",
                  "markers",
                  "texts",
                  "icons",
                  "marks"
                ],
                "additionalProperties": false
              },
              "svg": {
                "title": "Raw SVG",
                "x-inspector": {
                  "label": "Raw SVG",
                  "control": "textarea",
                  "group": "Advanced",
                  "help": "Passes through unchanged with a lint flag; prefer data (SPEC 5.2)."
                },
                "description": "Passes through unchanged with a lint flag; prefer data (SPEC 5.2).",
                "type": "string"
              }
            },
            "required": [
              "id",
              "alt",
              "type",
              "fit"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "type": "string",
                "minLength": 1,
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "text",
                  "group": "Text"
                }
              },
              "type": {
                "type": "string",
                "const": "dither"
              },
              "height": {
                "type": "number",
                "const": 220,
                "title": "Height",
                "x-inspector": {
                  "label": "Height",
                  "control": "readonly",
                  "group": "Layout"
                }
              },
              "ramp": {
                "type": "string",
                "const": "linear-x",
                "title": "Ramp",
                "x-inspector": {
                  "label": "Ramp",
                  "control": "readonly",
                  "group": "Block"
                }
              },
              "border": {
                "title": "Border",
                "x-inspector": {
                  "label": "Border",
                  "control": "toggle",
                  "group": "Block"
                },
                "type": "boolean",
                "const": true
              }
            },
            "required": [
              "id",
              "alt",
              "type",
              "height",
              "ramp"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "mark"
              },
              "w": {
                "type": "number",
                "exclusiveMinimum": 0,
                "title": "Width",
                "x-inspector": {
                  "label": "Width",
                  "control": "number",
                  "group": "Layout",
                  "help": "The symbol is 1213 by 771, so width is 1.573 times height (report 03 section 4.5)."
                },
                "description": "The symbol is 1213 by 771, so width is 1.573 times height (report 03 section 4.5)."
              },
              "h": {
                "type": "number",
                "exclusiveMinimum": 0,
                "title": "Height",
                "x-inspector": {
                  "label": "Height",
                  "control": "number",
                  "group": "Layout"
                }
              }
            },
            "required": [
              "id",
              "type",
              "w",
              "h"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "markSizes"
              },
              "sizes": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "number",
                  "exclusiveMinimum": 0
                },
                "title": "Sizes",
                "x-inspector": {
                  "label": "Sizes",
                  "control": "json",
                  "snap": [
                    16,
                    32,
                    64,
                    128,
                    256
                  ],
                  "group": "Block"
                }
              }
            },
            "required": [
              "id",
              "type",
              "sizes"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "matrix"
              },
              "cells": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "array",
                  "items": {
                    "type": "number"
                  }
                },
                "title": "Cells",
                "x-inspector": {
                  "label": "Cells",
                  "control": "json",
                  "group": "Block"
                }
              },
              "caption": {
                "title": "Caption",
                "x-inspector": {
                  "label": "Caption",
                  "control": "textarea",
                  "group": "Text"
                },
                "type": "string"
              }
            },
            "required": [
              "id",
              "type",
              "cells"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "logoPlates"
              },
              "items": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "asset": {
                      "anyOf": [
                        {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        },
                        {
                          "type": "string",
                          "const": ""
                        }
                      ],
                      "title": "Logo",
                      "x-inspector": {
                        "label": "Logo",
                        "control": "asset",
                        "group": "Asset"
                      }
                    },
                    "mark": {
                      "title": "GT mark",
                      "x-inspector": {
                        "label": "GT mark",
                        "control": "toggle",
                        "group": "Block",
                        "help": "Draws the GT mark on the plate instead of a logo capture (slide 14)."
                      },
                      "description": "Draws the GT mark on the plate instead of a logo capture (slide 14).",
                      "type": "boolean",
                      "const": true
                    },
                    "name": {
                      "type": "string",
                      "title": "Name",
                      "x-inspector": {
                        "label": "Name",
                        "control": "text",
                        "group": "Text"
                      }
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "id",
              "type",
              "items"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "type": {
                "type": "string",
                "const": "material"
              },
              "materialId": {
                "type": "string",
                "minLength": 1,
                "title": "Material",
                "x-inspector": {
                  "label": "Material",
                  "control": "select",
                  "group": "Block",
                  "help": "A catalog id from `turboslide material list` (paper:liquid-metal, paper:gem-smoke)."
                },
                "description": "A catalog id from `turboslide material list` (paper:liquid-metal, paper:gem-smoke)."
              },
              "preset": {
                "title": "Preset",
                "x-inspector": {
                  "label": "Preset",
                  "control": "select",
                  "group": "Block",
                  "help": "A palette preset of the material (ink-paper, paper-ink, brand-blue, fire); uniforms override it."
                },
                "description": "A palette preset of the material (ink-paper, paper-ink, brand-blue, fire); uniforms override it.",
                "type": "string",
                "minLength": 1
              },
              "uniforms": {
                "title": "Uniforms",
                "x-inspector": {
                  "label": "Uniforms",
                  "control": "json",
                  "group": "Block",
                  "help": "Uniform overrides in the recipe’s u_* names; the Material section edits them one by one."
                },
                "description": "Uniform overrides in the recipe’s u_* names; the Material section edits them one by one.",
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "array",
                      "items": {
                        "type": "number"
                      }
                    },
                    {
                      "type": "string"
                    }
                  ]
                }
              },
              "anchor": {
                "title": "Anchor (ms)",
                "x-inspector": {
                  "label": "Anchor (ms)",
                  "control": "number",
                  "snap": [
                    4000,
                    5500,
                    7000
                  ],
                  "group": "Block",
                  "help": "The frame time the capture freezes; the deck sampled its openers at about 4, 5.5 and 7 s."
                },
                "description": "The frame time the capture freezes; the deck sampled its openers at about 4, 5.5 and 7 s.",
                "type": "number",
                "minimum": 0
              },
              "twoTone": {
                "title": "Two-tone",
                "x-inspector": {
                  "label": "Two-tone",
                  "control": "toggle",
                  "group": "Block",
                  "help": "Capture through the deck’s 8 by 8 Bayer screen as a light and dark twin pair (SPEC 5.4)."
                },
                "description": "Capture through the deck’s 8 by 8 Bayer screen as a light and dark twin pair (SPEC 5.4).",
                "type": "boolean"
              },
              "plate": {
                "title": "Plate",
                "x-inspector": {
                  "label": "Plate",
                  "control": "select",
                  "snap": [
                    "lower-left",
                    "lower-right",
                    "upper-left"
                  ],
                  "group": "Block",
                  "help": "The plate rectangle the two-tone metrics are screened against (OPENERS.md:105, 176)."
                },
                "description": "The plate rectangle the two-tone metrics are screened against (OPENERS.md:105, 176).",
                "type": "string",
                "enum": [
                  "lower-left",
                  "lower-right",
                  "upper-left"
                ]
              },
              "asset": {
                "title": "Frame",
                "x-inspector": {
                  "label": "Frame",
                  "control": "asset",
                  "group": "Asset"
                },
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "motion": {
                "title": "Motion",
                "x-inspector": {
                  "label": "Motion",
                  "control": "json",
                  "group": "Block",
                  "help": "Whether the show plays the shader (play: off or show) and at what speed; every still surface draws the frame."
                },
                "description": "Whether the show plays the shader (play: off or show) and at what speed; every still surface draws the frame.",
                "type": "object",
                "properties": {
                  "play": {
                    "type": "string",
                    "enum": [
                      "off",
                      "show"
                    ]
                  },
                  "speed": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 2
                  }
                },
                "required": [
                  "play"
                ],
                "additionalProperties": false
              },
              "controls": {
                "title": "Controls",
                "x-inspector": {
                  "label": "Controls",
                  "control": "json",
                  "group": "Block",
                  "help": "The Shader section’s common controls (strength, detail, frequency, amplitude, density, brightness, grain, rotation, centerX, centerY, speed); the resolved uniforms sit beside them."
                },
                "description": "The Shader section’s common controls (strength, detail, frequency, amplitude, density, brightness, grain, rotation, centerX, centerY, speed); the resolved uniforms sit beside them.",
                "type": "object",
                "properties": {
                  "strength": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 2
                  },
                  "detail": {
                    "type": "number",
                    "minimum": 0.5,
                    "maximum": 8
                  },
                  "frequency": {
                    "type": "number",
                    "minimum": 0.2,
                    "maximum": 10
                  },
                  "amplitude": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 8
                  },
                  "density": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 2
                  },
                  "brightness": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 2
                  },
                  "grain": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "rotation": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "centerX": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "centerY": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "speed": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 2
                  }
                },
                "additionalProperties": false
              },
              "palette": {
                "title": "Palette",
                "x-inspector": {
                  "label": "Palette",
                  "control": "select",
                  "snap": [
                    "kit",
                    "custom"
                  ],
                  "group": "Block",
                  "help": "kit draws the brand kit’s six roles; custom records a deck that left the kit."
                },
                "description": "kit draws the brand kit’s six roles; custom records a deck that left the kit.",
                "type": "string",
                "enum": [
                  "kit",
                  "custom"
                ]
              },
              "height": {
                "title": "Height",
                "x-inspector": {
                  "label": "Height",
                  "control": "number",
                  "group": "Layout"
                },
                "type": "number",
                "exclusiveMinimum": 0
              },
              "caption": {
                "title": "Caption",
                "x-inspector": {
                  "label": "Caption",
                  "control": "textarea",
                  "group": "Text"
                },
                "type": "string"
              },
              "captionSize": {
                "title": "Caption size",
                "x-inspector": {
                  "label": "Caption size",
                  "control": "select",
                  "snap": [
                    16,
                    15
                  ],
                  "group": "Block"
                },
                "type": "number",
                "enum": [
                  16,
                  15
                ]
              },
              "alt": {
                "type": "string",
                "minLength": 1,
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "text",
                  "group": "Text"
                }
              }
            },
            "required": [
              "id",
              "type",
              "materialId",
              "alt"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "box"
              },
              "fill": {
                "title": "Fill",
                "x-inspector": {
                  "label": "Fill",
                  "control": "color",
                  "snap": [
                    "ink",
                    "paper",
                    "ink-2",
                    "titanium",
                    "hair",
                    "hair-soft",
                    "plate",
                    "edge",
                    "green",
                    "amber",
                    "red",
                    "blue",
                    "accent"
                  ],
                  "group": "Block",
                  "help": "The box ground; none unless set. Tokens follow the theme (docs/freeform.md)."
                },
                "description": "The box ground; none unless set. Tokens follow the theme (docs/freeform.md).",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              "stroke": {
                "title": "Stroke",
                "x-inspector": {
                  "label": "Stroke",
                  "control": "color",
                  "snap": [
                    "ink",
                    "paper",
                    "ink-2",
                    "titanium",
                    "hair",
                    "hair-soft",
                    "plate",
                    "edge",
                    "green",
                    "amber",
                    "red",
                    "blue",
                    "accent"
                  ],
                  "group": "Block",
                  "help": "The border color; the hairline token unless set."
                },
                "description": "The border color; the hairline token unless set.",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              "strokeWidth": {
                "title": "Stroke width",
                "x-inspector": {
                  "label": "Stroke width",
                  "control": "select",
                  "snap": [
                    0,
                    1,
                    1.5,
                    2
                  ],
                  "group": "Block",
                  "help": "1 is the sheet hairline, 1.5 the diagram emphasis stroke, 2 a plate edge; 0 removes the border."
                },
                "description": "1 is the sheet hairline, 1.5 the diagram emphasis stroke, 2 a plate edge; 0 removes the border.",
                "type": "number",
                "enum": [
                  0,
                  1,
                  1.5,
                  2
                ]
              },
              "radius": {
                "title": "Corner radius",
                "x-inspector": {
                  "label": "Corner radius",
                  "control": "number",
                  "snap": [
                    0,
                    4,
                    6,
                    8,
                    12,
                    16
                  ],
                  "group": "Block",
                  "help": "Every box on the sheet is square unless set; 6 is the one corner the chrome uses (SPEC 2.2)."
                },
                "description": "Every box on the sheet is square unless set; 6 is the one corner the chrome uses (SPEC 2.2).",
                "type": "number",
                "minimum": 0
              },
              "padding": {
                "title": "Padding",
                "x-inspector": {
                  "label": "Padding",
                  "control": "json",
                  "snap": [
                    0,
                    8,
                    12,
                    16,
                    22,
                    26
                  ],
                  "group": "Layout",
                  "help": "Padding in px: one number for every side, or { top, right, bottom, left }."
                },
                "description": "Padding in px: one number for every side, or { top, right, bottom, left }.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0
                  },
                  {
                    "type": "object",
                    "properties": {
                      "top": {
                        "type": "number",
                        "minimum": 0
                      },
                      "right": {
                        "type": "number",
                        "minimum": 0
                      },
                      "bottom": {
                        "type": "number",
                        "minimum": 0
                      },
                      "left": {
                        "type": "number",
                        "minimum": 0
                      }
                    },
                    "required": [
                      "top",
                      "right",
                      "bottom",
                      "left"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "height": {
                "title": "Height",
                "x-inspector": {
                  "label": "Height",
                  "control": "number",
                  "group": "Layout",
                  "help": "The height in a flow layout; on a freeform slide the position box decides."
                },
                "description": "The height in a flow layout; on a freeform slide the position box decides.",
                "type": "number",
                "exclusiveMinimum": 0
              },
              "text": {
                "title": "Text",
                "x-inspector": {
                  "label": "Text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "Paragraphs separated by a line break."
                },
                "description": "Paragraphs separated by a line break.",
                "type": "string"
              },
              "typography": {
                "title": "Typography",
                "x-inspector": {
                  "label": "Typography",
                  "control": "typography",
                  "group": "Text",
                  "help": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default."
                },
                "description": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default.",
                "type": "object",
                "properties": {
                  "size": {
                    "title": "Size",
                    "x-inspector": {
                      "label": "Size",
                      "control": "select",
                      "snap": [
                        88,
                        72,
                        58,
                        44,
                        34,
                        26,
                        24,
                        22,
                        20,
                        18,
                        17,
                        16,
                        15
                      ],
                      "group": "Text",
                      "help": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding."
                    },
                    "description": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "weight": {
                    "title": "Weight",
                    "x-inspector": {
                      "label": "Weight",
                      "control": "select",
                      "snap": [
                        300,
                        400,
                        500,
                        600,
                        700
                      ],
                      "group": "Text",
                      "help": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md)."
                    },
                    "description": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md).",
                    "type": "number",
                    "enum": [
                      300,
                      400,
                      500,
                      600,
                      700
                    ]
                  },
                  "align": {
                    "title": "Align",
                    "x-inspector": {
                      "label": "Align",
                      "control": "select",
                      "snap": [
                        "left",
                        "center",
                        "right",
                        "justify"
                      ],
                      "group": "Text"
                    },
                    "type": "string",
                    "enum": [
                      "left",
                      "center",
                      "right",
                      "justify"
                    ]
                  },
                  "tracking": {
                    "title": "Tracking (em)",
                    "x-inspector": {
                      "label": "Tracking (em)",
                      "control": "number",
                      "snap": [
                        -0.025,
                        -0.02,
                        -0.015,
                        -0.01,
                        0,
                        0.01,
                        0.02
                      ],
                      "group": "Text",
                      "help": "Letter spacing in em; the display faces sit at -0.025 (head:58)."
                    },
                    "description": "Letter spacing in em; the display faces sit at -0.025 (head:58).",
                    "type": "number"
                  },
                  "leading": {
                    "title": "Line spacing",
                    "x-inspector": {
                      "label": "Line spacing",
                      "control": "number",
                      "snap": [
                        1,
                        1.02,
                        1.06,
                        1.08,
                        1.1,
                        1.15,
                        1.2,
                        1.25,
                        1.3,
                        1.4,
                        1.45,
                        1.5,
                        1.7,
                        2
                      ],
                      "group": "Text",
                      "help": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu."
                    },
                    "description": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "spaceBefore": {
                    "title": "Space before",
                    "x-inspector": {
                      "label": "Space before",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space above every paragraph but the first, in px."
                    },
                    "description": "Space above every paragraph but the first, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "spaceAfter": {
                    "title": "Space after",
                    "x-inspector": {
                      "label": "Space after",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space below every paragraph but the last, in px."
                    },
                    "description": "Space below every paragraph but the last, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "columns": {
                    "title": "Columns",
                    "x-inspector": {
                      "label": "Columns",
                      "control": "select",
                      "snap": [
                        1,
                        2,
                        3
                      ],
                      "group": "Text",
                      "help": "Text columns inside the block with a 40 px gap; one when absent."
                    },
                    "description": "Text columns inside the block with a 40 px gap; one when absent.",
                    "type": "number",
                    "enum": [
                      1,
                      2,
                      3
                    ]
                  },
                  "indent": {
                    "title": "Indent",
                    "x-inspector": {
                      "label": "Indent",
                      "control": "number",
                      "snap": [
                        0,
                        64,
                        128,
                        192
                      ],
                      "group": "Text",
                      "help": "The paragraphs’ left indent in px; Increase indent steps it by 64."
                    },
                    "description": "The paragraphs’ left indent in px; Increase indent steps it by 64.",
                    "type": "number",
                    "minimum": 0
                  },
                  "family": {
                    "title": "Font",
                    "x-inspector": {
                      "label": "Font",
                      "control": "select",
                      "snap": [
                        "inter",
                        "roboto",
                        "open-sans",
                        "lato",
                        "montserrat",
                        "poppins",
                        "source-sans-3",
                        "source-serif-4",
                        "merriweather",
                        "playfair-display",
                        "lora",
                        "pt-serif",
                        "libre-baskerville",
                        "eb-garamond",
                        "nunito",
                        "raleway",
                        "work-sans",
                        "dm-sans",
                        "space-grotesk",
                        "oswald",
                        "bebas-neue",
                        "roboto-mono",
                        "jetbrains-mono",
                        "ibm-plex-sans",
                        "ibm-plex-mono",
                        "fira-code",
                        "geist",
                        "geist-mono",
                        "instrument-sans",
                        "manrope",
                        "bricolage-grotesque",
                        "schibsted-grotesk",
                        "newsreader",
                        "fraunces"
                      ],
                      "group": "Text",
                      "help": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent."
                    },
                    "description": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent.",
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  },
                  "numerals": {
                    "title": "Tabular figures",
                    "x-inspector": {
                      "label": "Tabular figures",
                      "control": "toggle",
                      "snap": [
                        "tabular"
                      ],
                      "group": "Text",
                      "help": "Every digit takes the same width, so numbers line up in a column"
                    },
                    "description": "Every digit takes the same width, so numbers line up in a column",
                    "type": "string",
                    "enum": [
                      "tabular"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "color": {
                "title": "Text color",
                "x-inspector": {
                  "label": "Text color",
                  "control": "color",
                  "snap": [
                    "ink",
                    "paper",
                    "ink-2",
                    "titanium",
                    "hair",
                    "hair-soft",
                    "plate",
                    "edge",
                    "green",
                    "amber",
                    "red",
                    "blue",
                    "accent"
                  ],
                  "group": "Text",
                  "help": "The color of the text inside the box; the ink unless set."
                },
                "description": "The color of the text inside the box; the ink unless set.",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              "dash": {
                "title": "Dash",
                "x-inspector": {
                  "label": "Dash",
                  "control": "select",
                  "snap": [
                    "solid",
                    "dot",
                    "dash",
                    "dashDot",
                    "longDash",
                    "longDashDot"
                  ],
                  "group": "Block",
                  "help": "Solid, dot, dash, dash dot, long dash or long dash dot."
                },
                "description": "Solid, dot, dash, dash dot, long dash or long dash dot.",
                "type": "string",
                "enum": [
                  "solid",
                  "dot",
                  "dash",
                  "dashDot",
                  "longDash",
                  "longDashDot"
                ]
              },
              "valign": {
                "title": "Vertical alignment",
                "x-inspector": {
                  "label": "Vertical alignment",
                  "control": "select",
                  "snap": [
                    "top",
                    "middle",
                    "bottom"
                  ],
                  "group": "Text",
                  "help": "Where the text sits in a positioned box; top when absent."
                },
                "description": "Where the text sits in a positioned box; top when absent.",
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              "shadow": {
                "title": "Drop shadow",
                "x-inspector": {
                  "label": "Drop shadow",
                  "control": "json",
                  "group": "Block",
                  "help": "The drop shadow: colour, transparency, angle, distance and blur."
                },
                "description": "The drop shadow: colour, transparency, angle, distance and blur.",
                "type": "object",
                "properties": {
                  "color": {
                    "title": "Shadow color",
                    "x-inspector": {
                      "label": "Shadow color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The shadow’s colour; the ink unless set."
                    },
                    "description": "The shadow’s colour; the ink unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "opacity": {
                    "title": "Transparency",
                    "x-inspector": {
                      "label": "Transparency",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s opacity 0 to 1; 0.3 unless set."
                    },
                    "description": "The shadow’s opacity 0 to 1; 0.3 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "angle": {
                    "title": "Angle",
                    "x-inspector": {
                      "label": "Angle",
                      "control": "number",
                      "group": "Block",
                      "help": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set."
                    },
                    "description": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "distance": {
                    "title": "Distance",
                    "x-inspector": {
                      "label": "Distance",
                      "control": "number",
                      "group": "Block",
                      "help": "How far the shadow falls, in px; 8 unless set."
                    },
                    "description": "How far the shadow falls, in px; 8 unless set.",
                    "type": "number",
                    "minimum": 0
                  },
                  "blur": {
                    "title": "Blur radius",
                    "x-inspector": {
                      "label": "Blur radius",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s blur in px; 12 unless set."
                    },
                    "description": "The shadow’s blur in px; 12 unless set.",
                    "type": "number",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              },
              "autofit": {
                "title": "Text fitting",
                "x-inspector": {
                  "label": "Text fitting",
                  "control": "select",
                  "snap": [
                    "none",
                    "shrink",
                    "grow"
                  ],
                  "group": "Text",
                  "help": "Do not autofit, Shrink text on overflow (steps the size down the ladder) or Resize shape to fit text (writes the box height, positioned blocks only); an explicit write, never a render time fit."
                },
                "description": "Do not autofit, Shrink text on overflow (steps the size down the ladder) or Resize shape to fit text (writes the box height, positioned blocks only); an explicit write, never a render time fit.",
                "type": "string",
                "enum": [
                  "none",
                  "shrink",
                  "grow"
                ]
              }
            },
            "required": [
              "id",
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "shape"
              },
              "shape": {
                "type": "string",
                "enum": [
                  "rectangle",
                  "rounded",
                  "ellipse",
                  "line",
                  "arrow",
                  "rect",
                  "roundRect",
                  "snip1Rect",
                  "snip2SameRect",
                  "snip2DiagRect",
                  "snipRoundRect",
                  "round1Rect",
                  "round2SameRect",
                  "round2DiagRect",
                  "triangle",
                  "rtTriangle",
                  "parallelogram",
                  "trapezoid",
                  "diamond",
                  "pentagon",
                  "hexagon",
                  "heptagon",
                  "octagon",
                  "decagon",
                  "dodecagon",
                  "pie",
                  "chord",
                  "teardrop",
                  "frame",
                  "halfFrame",
                  "corner",
                  "diagStripe",
                  "plus",
                  "plaque",
                  "can",
                  "cube",
                  "bevel",
                  "donut",
                  "noSmoking",
                  "blockArc",
                  "foldedCorner",
                  "smileyFace",
                  "heart",
                  "lightningBolt",
                  "sun",
                  "moon",
                  "cloud",
                  "arc",
                  "bracketPair",
                  "bracePair",
                  "leftBracket",
                  "rightBracket",
                  "leftBrace",
                  "rightBrace",
                  "flowChartProcess",
                  "flowChartAlternateProcess",
                  "flowChartDecision",
                  "flowChartInputOutput",
                  "flowChartPredefinedProcess",
                  "flowChartInternalStorage",
                  "flowChartDocument",
                  "flowChartMultidocument",
                  "flowChartTerminator",
                  "flowChartPreparation",
                  "flowChartManualInput",
                  "flowChartManualOperation",
                  "flowChartConnector",
                  "flowChartOffpageConnector",
                  "flowChartPunchedCard",
                  "flowChartPunchedTape",
                  "flowChartSummingJunction",
                  "flowChartOr",
                  "flowChartCollate",
                  "flowChartSort",
                  "flowChartExtract",
                  "flowChartMerge",
                  "flowChartOfflineStorage",
                  "flowChartOnlineStorage",
                  "flowChartMagneticTape",
                  "flowChartMagneticDisk",
                  "flowChartMagneticDrum",
                  "flowChartDelay",
                  "flowChartDisplay",
                  "star4",
                  "star5",
                  "star6",
                  "star7",
                  "star8",
                  "star10",
                  "star12",
                  "star16",
                  "star24",
                  "star32",
                  "irregularSeal1",
                  "irregularSeal2",
                  "ribbon",
                  "ribbon2",
                  "ellipseRibbon",
                  "ellipseRibbon2",
                  "verticalScroll",
                  "horizontalScroll",
                  "wave",
                  "doubleWave",
                  "rightArrow",
                  "leftArrow",
                  "upArrow",
                  "downArrow",
                  "leftRightArrow",
                  "upDownArrow",
                  "quadArrow",
                  "leftRightUpArrow",
                  "bentArrow",
                  "uturnArrow",
                  "leftUpArrow",
                  "bentUpArrow",
                  "curvedRightArrow",
                  "curvedLeftArrow",
                  "curvedUpArrow",
                  "curvedDownArrow",
                  "stripedRightArrow",
                  "notchedRightArrow",
                  "homePlate",
                  "chevron",
                  "rightArrowCallout",
                  "downArrowCallout",
                  "leftArrowCallout",
                  "upArrowCallout",
                  "leftRightArrowCallout",
                  "quadArrowCallout",
                  "wedgeRectCallout",
                  "wedgeRoundRectCallout",
                  "wedgeEllipseCallout",
                  "cloudCallout",
                  "mathPlus",
                  "mathMinus",
                  "mathMultiply",
                  "mathDivide",
                  "mathEqual",
                  "mathNotEqual",
                  "elbow",
                  "curved",
                  "curve",
                  "polyline",
                  "scribble"
                ],
                "title": "Shape",
                "x-inspector": {
                  "label": "Shape",
                  "control": "select",
                  "snap": [
                    "rectangle",
                    "rounded",
                    "ellipse",
                    "line",
                    "arrow",
                    "rect",
                    "roundRect",
                    "snip1Rect",
                    "snip2SameRect",
                    "snip2DiagRect",
                    "snipRoundRect",
                    "round1Rect",
                    "round2SameRect",
                    "round2DiagRect",
                    "ellipse",
                    "triangle",
                    "rtTriangle",
                    "parallelogram",
                    "trapezoid",
                    "diamond",
                    "pentagon",
                    "hexagon",
                    "heptagon",
                    "octagon",
                    "decagon",
                    "dodecagon",
                    "pie",
                    "chord",
                    "teardrop",
                    "frame",
                    "halfFrame",
                    "corner",
                    "diagStripe",
                    "plus",
                    "plaque",
                    "can",
                    "cube",
                    "bevel",
                    "donut",
                    "noSmoking",
                    "blockArc",
                    "foldedCorner",
                    "smileyFace",
                    "heart",
                    "lightningBolt",
                    "sun",
                    "moon",
                    "cloud",
                    "arc",
                    "bracketPair",
                    "bracePair",
                    "leftBracket",
                    "rightBracket",
                    "leftBrace",
                    "rightBrace",
                    "flowChartProcess",
                    "flowChartAlternateProcess",
                    "flowChartDecision",
                    "flowChartInputOutput",
                    "flowChartPredefinedProcess",
                    "flowChartInternalStorage",
                    "flowChartDocument",
                    "flowChartMultidocument",
                    "flowChartTerminator",
                    "flowChartPreparation",
                    "flowChartManualInput",
                    "flowChartManualOperation",
                    "flowChartConnector",
                    "flowChartOffpageConnector",
                    "flowChartPunchedCard",
                    "flowChartPunchedTape",
                    "flowChartSummingJunction",
                    "flowChartOr",
                    "flowChartCollate",
                    "flowChartSort",
                    "flowChartExtract",
                    "flowChartMerge",
                    "flowChartOfflineStorage",
                    "flowChartOnlineStorage",
                    "flowChartMagneticTape",
                    "flowChartMagneticDisk",
                    "flowChartMagneticDrum",
                    "flowChartDelay",
                    "flowChartDisplay",
                    "star4",
                    "star5",
                    "star6",
                    "star7",
                    "star8",
                    "star10",
                    "star12",
                    "star16",
                    "star24",
                    "star32",
                    "irregularSeal1",
                    "irregularSeal2",
                    "ribbon",
                    "ribbon2",
                    "ellipseRibbon",
                    "ellipseRibbon2",
                    "verticalScroll",
                    "horizontalScroll",
                    "wave",
                    "doubleWave",
                    "rightArrow",
                    "leftArrow",
                    "upArrow",
                    "downArrow",
                    "leftRightArrow",
                    "upDownArrow",
                    "quadArrow",
                    "leftRightUpArrow",
                    "bentArrow",
                    "uturnArrow",
                    "leftUpArrow",
                    "bentUpArrow",
                    "curvedRightArrow",
                    "curvedLeftArrow",
                    "curvedUpArrow",
                    "curvedDownArrow",
                    "stripedRightArrow",
                    "notchedRightArrow",
                    "homePlate",
                    "chevron",
                    "rightArrowCallout",
                    "downArrowCallout",
                    "leftArrowCallout",
                    "upArrowCallout",
                    "leftRightArrowCallout",
                    "quadArrowCallout",
                    "wedgeRectCallout",
                    "wedgeRoundRectCallout",
                    "wedgeEllipseCallout",
                    "cloudCallout",
                    "mathPlus",
                    "mathMinus",
                    "mathMultiply",
                    "mathDivide",
                    "mathEqual",
                    "mathNotEqual",
                    "elbow",
                    "curved",
                    "curve",
                    "polyline",
                    "scribble"
                  ],
                  "group": "Block",
                  "help": "A closed shape (a preset of the shape picker by its ECMA name, or rectangle, rounded, ellipse) fills its box; line, arrow, elbow and curved run along it; curve, polyline and scribble follow their points."
                },
                "description": "A closed shape (a preset of the shape picker by its ECMA name, or rectangle, rounded, ellipse) fills its box; line, arrow, elbow and curved run along it; curve, polyline and scribble follow their points."
              },
              "fill": {
                "title": "Fill",
                "x-inspector": {
                  "label": "Fill",
                  "control": "color",
                  "snap": [
                    "ink",
                    "paper",
                    "ink-2",
                    "titanium",
                    "hair",
                    "hair-soft",
                    "plate",
                    "edge",
                    "green",
                    "amber",
                    "red",
                    "blue",
                    "accent"
                  ],
                  "group": "Block",
                  "help": "The inside of a closed shape; none unless set."
                },
                "description": "The inside of a closed shape; none unless set.",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              "stroke": {
                "title": "Stroke",
                "x-inspector": {
                  "label": "Stroke",
                  "control": "color",
                  "snap": [
                    "ink",
                    "paper",
                    "ink-2",
                    "titanium",
                    "hair",
                    "hair-soft",
                    "plate",
                    "edge",
                    "green",
                    "amber",
                    "red",
                    "blue",
                    "accent"
                  ],
                  "group": "Block",
                  "help": "The outline or the line color; hair for closed shapes, ink for lines unless set."
                },
                "description": "The outline or the line color; hair for closed shapes, ink for lines unless set.",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              "width": {
                "title": "Stroke width",
                "x-inspector": {
                  "label": "Stroke width",
                  "control": "select",
                  "snap": [
                    1,
                    1.5,
                    2,
                    3,
                    4
                  ],
                  "group": "Block",
                  "help": "Stroke in px; 1 unless set. Above 1.5 is outside the diagram grammar (DECK-GRAMMAR.md:44) and meant for freeform slides."
                },
                "description": "Stroke in px; 1 unless set. Above 1.5 is outside the diagram grammar (DECK-GRAMMAR.md:44) and meant for freeform slides.",
                "type": "number",
                "enum": [
                  1,
                  1.5,
                  2,
                  3,
                  4
                ]
              },
              "radius": {
                "title": "Corner radius",
                "x-inspector": {
                  "label": "Corner radius",
                  "control": "number",
                  "snap": [
                    4,
                    6,
                    8,
                    12,
                    16,
                    24
                  ],
                  "group": "Block",
                  "help": "The rounded rectangle corner; 8 unless set."
                },
                "description": "The rounded rectangle corner; 8 unless set.",
                "type": "number",
                "minimum": 0
              },
              "arrowheads": {
                "title": "Arrowheads",
                "x-inspector": {
                  "label": "Arrowheads",
                  "control": "select",
                  "snap": [
                    "end",
                    "start",
                    "both",
                    "none"
                  ],
                  "group": "Block",
                  "help": "Filled 8 px triangles at the ends of an arrow; end unless set."
                },
                "description": "Filled 8 px triangles at the ends of an arrow; end unless set.",
                "type": "string",
                "enum": [
                  "end",
                  "start",
                  "both",
                  "none"
                ]
              },
              "orientation": {
                "title": "Orientation",
                "x-inspector": {
                  "label": "Orientation",
                  "control": "select",
                  "snap": [
                    "horizontal",
                    "vertical",
                    "diagonal-down",
                    "diagonal-up"
                  ],
                  "group": "Block",
                  "help": "How a line or arrow crosses its box; horizontal when the box is wider than tall, else vertical."
                },
                "description": "How a line or arrow crosses its box; horizontal when the box is wider than tall, else vertical.",
                "type": "string",
                "enum": [
                  "horizontal",
                  "vertical",
                  "diagonal-down",
                  "diagonal-up"
                ]
              },
              "height": {
                "title": "Height",
                "x-inspector": {
                  "label": "Height",
                  "control": "number",
                  "group": "Layout",
                  "help": "The height in a flow layout; on a freeform slide the position box decides."
                },
                "description": "The height in a flow layout; on a freeform slide the position box decides.",
                "type": "number",
                "exclusiveMinimum": 0
              },
              "text": {
                "title": "Text",
                "x-inspector": {
                  "label": "Text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The text inside a closed shape, paragraphs separated by a line break."
                },
                "description": "The text inside a closed shape, paragraphs separated by a line break.",
                "type": "string"
              },
              "typography": {
                "title": "Typography",
                "x-inspector": {
                  "label": "Typography",
                  "control": "typography",
                  "group": "Text",
                  "help": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default."
                },
                "description": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default.",
                "type": "object",
                "properties": {
                  "size": {
                    "title": "Size",
                    "x-inspector": {
                      "label": "Size",
                      "control": "select",
                      "snap": [
                        88,
                        72,
                        58,
                        44,
                        34,
                        26,
                        24,
                        22,
                        20,
                        18,
                        17,
                        16,
                        15
                      ],
                      "group": "Text",
                      "help": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding."
                    },
                    "description": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "weight": {
                    "title": "Weight",
                    "x-inspector": {
                      "label": "Weight",
                      "control": "select",
                      "snap": [
                        300,
                        400,
                        500,
                        600,
                        700
                      ],
                      "group": "Text",
                      "help": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md)."
                    },
                    "description": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md).",
                    "type": "number",
                    "enum": [
                      300,
                      400,
                      500,
                      600,
                      700
                    ]
                  },
                  "align": {
                    "title": "Align",
                    "x-inspector": {
                      "label": "Align",
                      "control": "select",
                      "snap": [
                        "left",
                        "center",
                        "right",
                        "justify"
                      ],
                      "group": "Text"
                    },
                    "type": "string",
                    "enum": [
                      "left",
                      "center",
                      "right",
                      "justify"
                    ]
                  },
                  "tracking": {
                    "title": "Tracking (em)",
                    "x-inspector": {
                      "label": "Tracking (em)",
                      "control": "number",
                      "snap": [
                        -0.025,
                        -0.02,
                        -0.015,
                        -0.01,
                        0,
                        0.01,
                        0.02
                      ],
                      "group": "Text",
                      "help": "Letter spacing in em; the display faces sit at -0.025 (head:58)."
                    },
                    "description": "Letter spacing in em; the display faces sit at -0.025 (head:58).",
                    "type": "number"
                  },
                  "leading": {
                    "title": "Line spacing",
                    "x-inspector": {
                      "label": "Line spacing",
                      "control": "number",
                      "snap": [
                        1,
                        1.02,
                        1.06,
                        1.08,
                        1.1,
                        1.15,
                        1.2,
                        1.25,
                        1.3,
                        1.4,
                        1.45,
                        1.5,
                        1.7,
                        2
                      ],
                      "group": "Text",
                      "help": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu."
                    },
                    "description": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "spaceBefore": {
                    "title": "Space before",
                    "x-inspector": {
                      "label": "Space before",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space above every paragraph but the first, in px."
                    },
                    "description": "Space above every paragraph but the first, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "spaceAfter": {
                    "title": "Space after",
                    "x-inspector": {
                      "label": "Space after",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space below every paragraph but the last, in px."
                    },
                    "description": "Space below every paragraph but the last, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "columns": {
                    "title": "Columns",
                    "x-inspector": {
                      "label": "Columns",
                      "control": "select",
                      "snap": [
                        1,
                        2,
                        3
                      ],
                      "group": "Text",
                      "help": "Text columns inside the block with a 40 px gap; one when absent."
                    },
                    "description": "Text columns inside the block with a 40 px gap; one when absent.",
                    "type": "number",
                    "enum": [
                      1,
                      2,
                      3
                    ]
                  },
                  "indent": {
                    "title": "Indent",
                    "x-inspector": {
                      "label": "Indent",
                      "control": "number",
                      "snap": [
                        0,
                        64,
                        128,
                        192
                      ],
                      "group": "Text",
                      "help": "The paragraphs’ left indent in px; Increase indent steps it by 64."
                    },
                    "description": "The paragraphs’ left indent in px; Increase indent steps it by 64.",
                    "type": "number",
                    "minimum": 0
                  },
                  "family": {
                    "title": "Font",
                    "x-inspector": {
                      "label": "Font",
                      "control": "select",
                      "snap": [
                        "inter",
                        "roboto",
                        "open-sans",
                        "lato",
                        "montserrat",
                        "poppins",
                        "source-sans-3",
                        "source-serif-4",
                        "merriweather",
                        "playfair-display",
                        "lora",
                        "pt-serif",
                        "libre-baskerville",
                        "eb-garamond",
                        "nunito",
                        "raleway",
                        "work-sans",
                        "dm-sans",
                        "space-grotesk",
                        "oswald",
                        "bebas-neue",
                        "roboto-mono",
                        "jetbrains-mono",
                        "ibm-plex-sans",
                        "ibm-plex-mono",
                        "fira-code",
                        "geist",
                        "geist-mono",
                        "instrument-sans",
                        "manrope",
                        "bricolage-grotesque",
                        "schibsted-grotesk",
                        "newsreader",
                        "fraunces"
                      ],
                      "group": "Text",
                      "help": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent."
                    },
                    "description": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent.",
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  },
                  "numerals": {
                    "title": "Tabular figures",
                    "x-inspector": {
                      "label": "Tabular figures",
                      "control": "toggle",
                      "snap": [
                        "tabular"
                      ],
                      "group": "Text",
                      "help": "Every digit takes the same width, so numbers line up in a column"
                    },
                    "description": "Every digit takes the same width, so numbers line up in a column",
                    "type": "string",
                    "enum": [
                      "tabular"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "color": {
                "title": "Text color",
                "x-inspector": {
                  "label": "Text color",
                  "control": "color",
                  "snap": [
                    "ink",
                    "paper",
                    "ink-2",
                    "titanium",
                    "hair",
                    "hair-soft",
                    "plate",
                    "edge",
                    "green",
                    "amber",
                    "red",
                    "blue",
                    "accent"
                  ],
                  "group": "Text",
                  "help": "The color of the text inside the shape; the ink unless set."
                },
                "description": "The color of the text inside the shape; the ink unless set.",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              "padding": {
                "title": "Padding",
                "x-inspector": {
                  "label": "Padding",
                  "control": "json",
                  "snap": [
                    0,
                    8,
                    12,
                    16,
                    22,
                    26
                  ],
                  "group": "Layout",
                  "help": "Padding in px: one number for every side, or { top, right, bottom, left }."
                },
                "description": "Padding in px: one number for every side, or { top, right, bottom, left }.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0
                  },
                  {
                    "type": "object",
                    "properties": {
                      "top": {
                        "type": "number",
                        "minimum": 0
                      },
                      "right": {
                        "type": "number",
                        "minimum": 0
                      },
                      "bottom": {
                        "type": "number",
                        "minimum": 0
                      },
                      "left": {
                        "type": "number",
                        "minimum": 0
                      }
                    },
                    "required": [
                      "top",
                      "right",
                      "bottom",
                      "left"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "valign": {
                "title": "Vertical alignment",
                "x-inspector": {
                  "label": "Vertical alignment",
                  "control": "select",
                  "snap": [
                    "top",
                    "middle",
                    "bottom"
                  ],
                  "group": "Text",
                  "help": "Where the text sits in a positioned box; top when absent."
                },
                "description": "Where the text sits in a positioned box; top when absent.",
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              "autofit": {
                "title": "Text fitting",
                "x-inspector": {
                  "label": "Text fitting",
                  "control": "select",
                  "snap": [
                    "none",
                    "shrink",
                    "grow"
                  ],
                  "group": "Text",
                  "help": "Do not autofit, Shrink text on overflow (steps the size down the ladder) or Resize shape to fit text (writes the box height, positioned blocks only); an explicit write, never a render time fit."
                },
                "description": "Do not autofit, Shrink text on overflow (steps the size down the ladder) or Resize shape to fit text (writes the box height, positioned blocks only); an explicit write, never a render time fit.",
                "type": "string",
                "enum": [
                  "none",
                  "shrink",
                  "grow"
                ]
              },
              "adjust": {
                "title": "Adjust",
                "x-inspector": {
                  "label": "Adjust",
                  "control": "json",
                  "group": "Block",
                  "help": "The preset’s adjust values as fractions of 100000 in guide order, such as a callout’s pointer or a rounded corner."
                },
                "description": "The preset’s adjust values as fractions of 100000 in guide order, such as a callout’s pointer or a rounded corner.",
                "type": "array",
                "items": {
                  "type": "number"
                }
              },
              "dash": {
                "title": "Dash",
                "x-inspector": {
                  "label": "Dash",
                  "control": "select",
                  "snap": [
                    "solid",
                    "dot",
                    "dash",
                    "dashDot",
                    "longDash",
                    "longDashDot"
                  ],
                  "group": "Block",
                  "help": "Solid, dot, dash, dash dot, long dash or long dash dot."
                },
                "description": "Solid, dot, dash, dash dot, long dash or long dash dot.",
                "type": "string",
                "enum": [
                  "solid",
                  "dot",
                  "dash",
                  "dashDot",
                  "longDash",
                  "longDashDot"
                ]
              },
              "shadow": {
                "title": "Drop shadow",
                "x-inspector": {
                  "label": "Drop shadow",
                  "control": "json",
                  "group": "Block",
                  "help": "The drop shadow: colour, transparency, angle, distance and blur."
                },
                "description": "The drop shadow: colour, transparency, angle, distance and blur.",
                "type": "object",
                "properties": {
                  "color": {
                    "title": "Shadow color",
                    "x-inspector": {
                      "label": "Shadow color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The shadow’s colour; the ink unless set."
                    },
                    "description": "The shadow’s colour; the ink unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "opacity": {
                    "title": "Transparency",
                    "x-inspector": {
                      "label": "Transparency",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s opacity 0 to 1; 0.3 unless set."
                    },
                    "description": "The shadow’s opacity 0 to 1; 0.3 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "angle": {
                    "title": "Angle",
                    "x-inspector": {
                      "label": "Angle",
                      "control": "number",
                      "group": "Block",
                      "help": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set."
                    },
                    "description": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "distance": {
                    "title": "Distance",
                    "x-inspector": {
                      "label": "Distance",
                      "control": "number",
                      "group": "Block",
                      "help": "How far the shadow falls, in px; 8 unless set."
                    },
                    "description": "How far the shadow falls, in px; 8 unless set.",
                    "type": "number",
                    "minimum": 0
                  },
                  "blur": {
                    "title": "Blur radius",
                    "x-inspector": {
                      "label": "Blur radius",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s blur in px; 12 unless set."
                    },
                    "description": "The shadow’s blur in px; 12 unless set.",
                    "type": "number",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              },
              "bend": {
                "title": "Bend",
                "x-inspector": {
                  "label": "Bend",
                  "control": "number",
                  "snap": [
                    0.25,
                    0.5,
                    0.75
                  ],
                  "group": "Block",
                  "help": "Where an elbow or curved connector turns, 0 to 1 along the box; 0.5 unless set."
                },
                "description": "Where an elbow or curved connector turns, 0 to 1 along the box; 0.5 unless set.",
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "axis": {
                "title": "Axis",
                "x-inspector": {
                  "label": "Axis",
                  "control": "select",
                  "snap": [
                    "horizontal",
                    "vertical",
                    "horizontal-vertical",
                    "vertical-horizontal"
                  ],
                  "group": "Block",
                  "help": "The axis an elbow or curved connector leaves its start and arrives at its end along; horizontal unless set. horizontal-vertical and vertical-horizontal are the L that leaves along the first axis and arrives along the second. An attached end takes it from the connection site it sits on (docs/archive/rounds/POLISH.md item 33)."
                },
                "description": "The axis an elbow or curved connector leaves its start and arrives at its end along; horizontal unless set. horizontal-vertical and vertical-horizontal are the L that leaves along the first axis and arrives along the second. An attached end takes it from the connection site it sits on (docs/archive/rounds/POLISH.md item 33).",
                "type": "string",
                "enum": [
                  "horizontal",
                  "vertical",
                  "horizontal-vertical",
                  "vertical-horizontal"
                ]
              },
              "points": {
                "title": "Points",
                "x-inspector": {
                  "label": "Points",
                  "control": "json",
                  "group": "Block",
                  "help": "The points of a curve, polyline or scribble as fractions of the box, two or more."
                },
                "description": "The points of a curve, polyline or scribble as fractions of the box, two or more.",
                "minItems": 2,
                "type": "array",
                "items": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    }
                  ],
                  "items": false,
                  "minItems": 2,
                  "maxItems": 2
                }
              },
              "closed": {
                "title": "Closed",
                "x-inspector": {
                  "label": "Closed",
                  "control": "toggle",
                  "group": "Block",
                  "help": "A curve or polyline joined back to its first point; filled when a fill is set."
                },
                "description": "A curve or polyline joined back to its first point; filled when a fill is set.",
                "type": "boolean",
                "const": true
              },
              "lineStart": {
                "title": "Line start",
                "x-inspector": {
                  "label": "Line start",
                  "control": "select",
                  "snap": [
                    "none",
                    "fillArrow",
                    "stealth",
                    "fillCircle",
                    "fillSquare",
                    "fillDiamond",
                    "openArrow",
                    "openCircle",
                    "openSquare",
                    "openDiamond"
                  ],
                  "group": "Block",
                  "help": "The decoration at the start of a line."
                },
                "description": "The decoration at the start of a line.",
                "type": "string",
                "enum": [
                  "none",
                  "fillArrow",
                  "stealth",
                  "fillCircle",
                  "fillSquare",
                  "fillDiamond",
                  "openArrow",
                  "openCircle",
                  "openSquare",
                  "openDiamond"
                ]
              },
              "lineEnd": {
                "title": "Line end",
                "x-inspector": {
                  "label": "Line end",
                  "control": "select",
                  "snap": [
                    "none",
                    "fillArrow",
                    "stealth",
                    "fillCircle",
                    "fillSquare",
                    "fillDiamond",
                    "openArrow",
                    "openCircle",
                    "openSquare",
                    "openDiamond"
                  ],
                  "group": "Block",
                  "help": "The decoration at the end of a line."
                },
                "description": "The decoration at the end of a line.",
                "type": "string",
                "enum": [
                  "none",
                  "fillArrow",
                  "stealth",
                  "fillCircle",
                  "fillSquare",
                  "fillDiamond",
                  "openArrow",
                  "openCircle",
                  "openSquare",
                  "openDiamond"
                ]
              },
              "connect": {
                "title": "Connections",
                "x-inspector": {
                  "label": "Connections",
                  "control": "json",
                  "group": "Block",
                  "help": "The shapes the ends of a connector are attached to, each as the block id and the index of its connection site."
                },
                "description": "The shapes the ends of a connector are attached to, each as the block id and the index of its connection site.",
                "type": "object",
                "properties": {
                  "start": {
                    "type": "object",
                    "properties": {
                      "block": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "site": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "block",
                      "site"
                    ],
                    "additionalProperties": false
                  },
                  "end": {
                    "type": "object",
                    "properties": {
                      "block": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "site": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "block",
                      "site"
                    ],
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "type",
              "shape"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "rule"
              },
              "orientation": {
                "type": "string",
                "enum": [
                  "horizontal",
                  "vertical"
                ],
                "title": "Orientation",
                "x-inspector": {
                  "label": "Orientation",
                  "control": "select",
                  "snap": [
                    "horizontal",
                    "vertical"
                  ],
                  "group": "Block"
                }
              },
              "length": {
                "title": "Length",
                "x-inspector": {
                  "label": "Length",
                  "control": "number",
                  "group": "Layout",
                  "help": "In px; the slot width in a flow layout when absent. On a freeform slide the box decides."
                },
                "description": "In px; the slot width in a flow layout when absent. On a freeform slide the box decides.",
                "type": "number",
                "exclusiveMinimum": 0
              },
              "weight": {
                "title": "Weight",
                "x-inspector": {
                  "label": "Weight",
                  "control": "select",
                  "snap": [
                    1,
                    1.5,
                    2
                  ],
                  "group": "Block",
                  "help": "1 px is the sheet hairline (DECK-GRAMMAR.md:15)."
                },
                "description": "1 px is the sheet hairline (DECK-GRAMMAR.md:15).",
                "type": "number",
                "enum": [
                  1,
                  1.5,
                  2
                ]
              },
              "color": {
                "title": "Color",
                "x-inspector": {
                  "label": "Color",
                  "control": "color",
                  "snap": [
                    "ink",
                    "paper",
                    "ink-2",
                    "titanium",
                    "hair",
                    "hair-soft",
                    "plate",
                    "edge",
                    "green",
                    "amber",
                    "red",
                    "blue",
                    "accent"
                  ],
                  "group": "Block",
                  "help": "The rule color; the hairline token unless set."
                },
                "description": "The rule color; the hairline token unless set.",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              "dash": {
                "title": "Dash",
                "x-inspector": {
                  "label": "Dash",
                  "control": "select",
                  "snap": [
                    "solid",
                    "dot",
                    "dash",
                    "dashDot",
                    "longDash",
                    "longDashDot"
                  ],
                  "group": "Block",
                  "help": "Solid, dot, dash, dash dot, long dash or long dash dot."
                },
                "description": "Solid, dot, dash, dash dot, long dash or long dash dot.",
                "type": "string",
                "enum": [
                  "solid",
                  "dot",
                  "dash",
                  "dashDot",
                  "longDash",
                  "longDashDot"
                ]
              }
            },
            "required": [
              "id",
              "type",
              "orientation"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "text"
              },
              "text": {
                "type": "string",
                "title": "Text",
                "x-inspector": {
                  "label": "Text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "Paragraphs separated by a line break."
                },
                "description": "Paragraphs separated by a line break."
              },
              "typography": {
                "title": "Typography",
                "x-inspector": {
                  "label": "Typography",
                  "control": "typography",
                  "group": "Text",
                  "help": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default."
                },
                "description": "Size from the ladder, weight, alignment, tracking, line and paragraph spacing, columns and indent; an absent field keeps the grammar default.",
                "type": "object",
                "properties": {
                  "size": {
                    "title": "Size",
                    "x-inspector": {
                      "label": "Size",
                      "control": "select",
                      "snap": [
                        88,
                        72,
                        58,
                        44,
                        34,
                        26,
                        24,
                        22,
                        20,
                        18,
                        17,
                        16,
                        15
                      ],
                      "group": "Text",
                      "help": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding."
                    },
                    "description": "Font size in px from the type ladder (head:59-65); another value is a type/ladder finding.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "weight": {
                    "title": "Weight",
                    "x-inspector": {
                      "label": "Weight",
                      "control": "select",
                      "snap": [
                        300,
                        400,
                        500,
                        600,
                        700
                      ],
                      "group": "Text",
                      "help": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md)."
                    },
                    "description": "Inter weight; display weight above 500 is a type/weight-cap finding (DECK-GRAMMAR.md:20). The PPTX export carries Regular and Medium cuts: 600 and 700 travel as Medium plus bold, 300 as Regular, and the report says so (docs/pptx.md).",
                    "type": "number",
                    "enum": [
                      300,
                      400,
                      500,
                      600,
                      700
                    ]
                  },
                  "align": {
                    "title": "Align",
                    "x-inspector": {
                      "label": "Align",
                      "control": "select",
                      "snap": [
                        "left",
                        "center",
                        "right",
                        "justify"
                      ],
                      "group": "Text"
                    },
                    "type": "string",
                    "enum": [
                      "left",
                      "center",
                      "right",
                      "justify"
                    ]
                  },
                  "tracking": {
                    "title": "Tracking (em)",
                    "x-inspector": {
                      "label": "Tracking (em)",
                      "control": "number",
                      "snap": [
                        -0.025,
                        -0.02,
                        -0.015,
                        -0.01,
                        0,
                        0.01,
                        0.02
                      ],
                      "group": "Text",
                      "help": "Letter spacing in em; the display faces sit at -0.025 (head:58)."
                    },
                    "description": "Letter spacing in em; the display faces sit at -0.025 (head:58).",
                    "type": "number"
                  },
                  "leading": {
                    "title": "Line spacing",
                    "x-inspector": {
                      "label": "Line spacing",
                      "control": "number",
                      "snap": [
                        1,
                        1.02,
                        1.06,
                        1.08,
                        1.1,
                        1.15,
                        1.2,
                        1.25,
                        1.3,
                        1.4,
                        1.45,
                        1.5,
                        1.7,
                        2
                      ],
                      "group": "Text",
                      "help": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu."
                    },
                    "description": "Line height as a factor; body copy runs 1.5, headings 1.02 to 1.1 (head:59-65); Single, 1.15, 1.5 and Double are the values of the Line spacing menu.",
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "spaceBefore": {
                    "title": "Space before",
                    "x-inspector": {
                      "label": "Space before",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space above every paragraph but the first, in px."
                    },
                    "description": "Space above every paragraph but the first, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "spaceAfter": {
                    "title": "Space after",
                    "x-inspector": {
                      "label": "Space after",
                      "control": "number",
                      "snap": [
                        0,
                        8,
                        16,
                        24
                      ],
                      "group": "Text",
                      "help": "Space below every paragraph but the last, in px."
                    },
                    "description": "Space below every paragraph but the last, in px.",
                    "type": "number",
                    "minimum": 0
                  },
                  "columns": {
                    "title": "Columns",
                    "x-inspector": {
                      "label": "Columns",
                      "control": "select",
                      "snap": [
                        1,
                        2,
                        3
                      ],
                      "group": "Text",
                      "help": "Text columns inside the block with a 40 px gap; one when absent."
                    },
                    "description": "Text columns inside the block with a 40 px gap; one when absent.",
                    "type": "number",
                    "enum": [
                      1,
                      2,
                      3
                    ]
                  },
                  "indent": {
                    "title": "Indent",
                    "x-inspector": {
                      "label": "Indent",
                      "control": "number",
                      "snap": [
                        0,
                        64,
                        128,
                        192
                      ],
                      "group": "Text",
                      "help": "The paragraphs’ left indent in px; Increase indent steps it by 64."
                    },
                    "description": "The paragraphs’ left indent in px; Increase indent steps it by 64.",
                    "type": "number",
                    "minimum": 0
                  },
                  "family": {
                    "title": "Font",
                    "x-inspector": {
                      "label": "Font",
                      "control": "select",
                      "snap": [
                        "inter",
                        "roboto",
                        "open-sans",
                        "lato",
                        "montserrat",
                        "poppins",
                        "source-sans-3",
                        "source-serif-4",
                        "merriweather",
                        "playfair-display",
                        "lora",
                        "pt-serif",
                        "libre-baskerville",
                        "eb-garamond",
                        "nunito",
                        "raleway",
                        "work-sans",
                        "dm-sans",
                        "space-grotesk",
                        "oswald",
                        "bebas-neue",
                        "roboto-mono",
                        "jetbrains-mono",
                        "ibm-plex-sans",
                        "ibm-plex-mono",
                        "fira-code",
                        "geist",
                        "geist-mono",
                        "instrument-sans",
                        "manrope",
                        "bricolage-grotesque",
                        "schibsted-grotesk",
                        "newsreader",
                        "fraunces"
                      ],
                      "group": "Text",
                      "help": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent."
                    },
                    "description": "A face from the font catalog by id (docs/archive/rounds/PRODUCT.md 4.2); the theme’s face when absent.",
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  },
                  "numerals": {
                    "title": "Tabular figures",
                    "x-inspector": {
                      "label": "Tabular figures",
                      "control": "toggle",
                      "snap": [
                        "tabular"
                      ],
                      "group": "Text",
                      "help": "Every digit takes the same width, so numbers line up in a column"
                    },
                    "description": "Every digit takes the same width, so numbers line up in a column",
                    "type": "string",
                    "enum": [
                      "tabular"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "color": {
                "title": "Color",
                "x-inspector": {
                  "label": "Color",
                  "control": "color",
                  "snap": [
                    "ink",
                    "paper",
                    "ink-2",
                    "titanium",
                    "hair",
                    "hair-soft",
                    "plate",
                    "edge",
                    "green",
                    "amber",
                    "red",
                    "blue",
                    "accent"
                  ],
                  "group": "Text",
                  "help": "The text color; the ink unless set."
                },
                "description": "The text color; the ink unless set.",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              "outline": {
                "title": "Outline",
                "x-inspector": {
                  "label": "Outline",
                  "control": "json",
                  "group": "Text",
                  "help": "Word art: the stroke around the letters, { color, width } with the width 1, 1.5 or 2 px."
                },
                "description": "Word art: the stroke around the letters, { color, width } with the width 1, 1.5 or 2 px.",
                "type": "object",
                "properties": {
                  "color": {
                    "title": "Outline color",
                    "x-inspector": {
                      "label": "Outline color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The stroke around the letters."
                    },
                    "description": "The stroke around the letters.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "width": {
                    "type": "number",
                    "enum": [
                      1,
                      1.5,
                      2
                    ]
                  }
                },
                "required": [
                  "color",
                  "width"
                ],
                "additionalProperties": false
              },
              "valign": {
                "title": "Vertical alignment",
                "x-inspector": {
                  "label": "Vertical alignment",
                  "control": "select",
                  "snap": [
                    "top",
                    "middle",
                    "bottom"
                  ],
                  "group": "Text",
                  "help": "Where the text sits in a positioned box; top when absent."
                },
                "description": "Where the text sits in a positioned box; top when absent.",
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              "padding": {
                "title": "Padding",
                "x-inspector": {
                  "label": "Padding",
                  "control": "json",
                  "snap": [
                    0,
                    8,
                    12,
                    16,
                    22,
                    26
                  ],
                  "group": "Layout",
                  "help": "Padding in px: one number for every side, or { top, right, bottom, left }."
                },
                "description": "Padding in px: one number for every side, or { top, right, bottom, left }.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0
                  },
                  {
                    "type": "object",
                    "properties": {
                      "top": {
                        "type": "number",
                        "minimum": 0
                      },
                      "right": {
                        "type": "number",
                        "minimum": 0
                      },
                      "bottom": {
                        "type": "number",
                        "minimum": 0
                      },
                      "left": {
                        "type": "number",
                        "minimum": 0
                      }
                    },
                    "required": [
                      "top",
                      "right",
                      "bottom",
                      "left"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "shadow": {
                "title": "Drop shadow",
                "x-inspector": {
                  "label": "Drop shadow",
                  "control": "json",
                  "group": "Block",
                  "help": "The drop shadow: colour, transparency, angle, distance and blur."
                },
                "description": "The drop shadow: colour, transparency, angle, distance and blur.",
                "type": "object",
                "properties": {
                  "color": {
                    "title": "Shadow color",
                    "x-inspector": {
                      "label": "Shadow color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The shadow’s colour; the ink unless set."
                    },
                    "description": "The shadow’s colour; the ink unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "opacity": {
                    "title": "Transparency",
                    "x-inspector": {
                      "label": "Transparency",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s opacity 0 to 1; 0.3 unless set."
                    },
                    "description": "The shadow’s opacity 0 to 1; 0.3 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "angle": {
                    "title": "Angle",
                    "x-inspector": {
                      "label": "Angle",
                      "control": "number",
                      "group": "Block",
                      "help": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set."
                    },
                    "description": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "distance": {
                    "title": "Distance",
                    "x-inspector": {
                      "label": "Distance",
                      "control": "number",
                      "group": "Block",
                      "help": "How far the shadow falls, in px; 8 unless set."
                    },
                    "description": "How far the shadow falls, in px; 8 unless set.",
                    "type": "number",
                    "minimum": 0
                  },
                  "blur": {
                    "title": "Blur radius",
                    "x-inspector": {
                      "label": "Blur radius",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s blur in px; 12 unless set."
                    },
                    "description": "The shadow’s blur in px; 12 unless set.",
                    "type": "number",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              },
              "autofit": {
                "title": "Text fitting",
                "x-inspector": {
                  "label": "Text fitting",
                  "control": "select",
                  "snap": [
                    "none",
                    "shrink",
                    "grow"
                  ],
                  "group": "Text",
                  "help": "Do not autofit, Shrink text on overflow (steps the size down the ladder) or Resize shape to fit text (writes the box height, positioned blocks only); an explicit write, never a render time fit."
                },
                "description": "Do not autofit, Shrink text on overflow (steps the size down the ladder) or Resize shape to fit text (writes the box height, positioned blocks only); an explicit write, never a render time fit.",
                "type": "string",
                "enum": [
                  "none",
                  "shrink",
                  "grow"
                ]
              }
            },
            "required": [
              "id",
              "type",
              "text"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "icon"
              },
              "name": {
                "type": "string",
                "enum": [
                  "gt-mark",
                  "check-circle",
                  "x-circle",
                  "clock",
                  "exclamation-circle",
                  "arrow-top-right-on-square",
                  "arrow-right",
                  "arrow-up",
                  "swatch",
                  "document-text",
                  "sparkles",
                  "globe-alt",
                  "signal",
                  "folder",
                  "presentation-chart-bar",
                  "play",
                  "arrows-right-left",
                  "arrows-up-down",
                  "archive-box",
                  "bolt",
                  "rectangle-stack",
                  "list-bullet",
                  "photo",
                  "cube",
                  "map",
                  "key",
                  "lock-open",
                  "star",
                  "book-open",
                  "squares-2x2",
                  "code-bracket",
                  "command-line",
                  "building-office-2",
                  "briefcase",
                  "user-group",
                  "user-circle",
                  "scale",
                  "finger-print",
                  "eye",
                  "eye-slash",
                  "pencil-square",
                  "chat-bubble-left-right",
                  "clipboard-document-check",
                  "wrench-screwdriver",
                  "cog-6-tooth",
                  "pause-circle",
                  "adjustments-horizontal",
                  "plus",
                  "device-phone-mobile",
                  "language",
                  "table-cells",
                  "envelope",
                  "server",
                  "paint-brush",
                  "home",
                  "tag",
                  "newspaper",
                  "magnifying-glass",
                  "rocket-launch",
                  "check-badge",
                  "beaker",
                  "bars-3",
                  "view-columns",
                  "identification",
                  "lock-closed",
                  "bars-3-bottom-left",
                  "bars-3-center-left",
                  "bars-3-bottom-right",
                  "bell",
                  "inbox",
                  "cursor-arrow-rays",
                  "arrow-down-tray"
                ],
                "title": "Icon",
                "x-inspector": {
                  "label": "Icon",
                  "control": "icon",
                  "group": "Block"
                }
              },
              "size": {
                "title": "Size",
                "x-inspector": {
                  "label": "Size",
                  "control": "select",
                  "snap": [
                    16,
                    20,
                    24,
                    32,
                    48,
                    64,
                    96
                  ],
                  "group": "Block",
                  "help": "The glyph size in px; 24 unless set. Inside lists icons stay 20 and 24 (DECK-GRAMMAR.md:40)."
                },
                "description": "The glyph size in px; 24 unless set. Inside lists icons stay 20 and 24 (DECK-GRAMMAR.md:40).",
                "type": "number",
                "enum": [
                  16,
                  20,
                  24,
                  32,
                  48,
                  64,
                  96
                ]
              },
              "color": {
                "title": "Color",
                "x-inspector": {
                  "label": "Color",
                  "control": "color",
                  "snap": [
                    "ink",
                    "paper",
                    "ink-2",
                    "titanium",
                    "hair",
                    "hair-soft",
                    "plate",
                    "edge",
                    "green",
                    "amber",
                    "red",
                    "blue",
                    "accent"
                  ],
                  "group": "Block",
                  "help": "The glyph color; the ink unless set. Green, amber, red and blue are the semantic hues."
                },
                "description": "The glyph color; the ink unless set. Green, amber, red and blue are the semantic hues.",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              "shadow": {
                "title": "Drop shadow",
                "x-inspector": {
                  "label": "Drop shadow",
                  "control": "json",
                  "group": "Block",
                  "help": "The drop shadow: colour, transparency, angle, distance and blur."
                },
                "description": "The drop shadow: colour, transparency, angle, distance and blur.",
                "type": "object",
                "properties": {
                  "color": {
                    "title": "Shadow color",
                    "x-inspector": {
                      "label": "Shadow color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The shadow’s colour; the ink unless set."
                    },
                    "description": "The shadow’s colour; the ink unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "opacity": {
                    "title": "Transparency",
                    "x-inspector": {
                      "label": "Transparency",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s opacity 0 to 1; 0.3 unless set."
                    },
                    "description": "The shadow’s opacity 0 to 1; 0.3 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "angle": {
                    "title": "Angle",
                    "x-inspector": {
                      "label": "Angle",
                      "control": "number",
                      "group": "Block",
                      "help": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set."
                    },
                    "description": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "distance": {
                    "title": "Distance",
                    "x-inspector": {
                      "label": "Distance",
                      "control": "number",
                      "group": "Block",
                      "help": "How far the shadow falls, in px; 8 unless set."
                    },
                    "description": "How far the shadow falls, in px; 8 unless set.",
                    "type": "number",
                    "minimum": 0
                  },
                  "blur": {
                    "title": "Blur radius",
                    "x-inspector": {
                      "label": "Blur radius",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s blur in px; 12 unless set."
                    },
                    "description": "The shadow’s blur in px; 12 unless set.",
                    "type": "number",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "type",
              "name"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "table"
              },
              "columns": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "width": {
                      "title": "Width",
                      "x-inspector": {
                        "label": "Width",
                        "control": "number",
                        "group": "Layout",
                        "help": "The column width in px; equal columns when every width is absent."
                      },
                      "description": "The column width in px; equal columns when every width is absent.",
                      "type": "number",
                      "exclusiveMinimum": 0
                    },
                    "align": {
                      "title": "Align",
                      "x-inspector": {
                        "label": "Align",
                        "control": "select",
                        "snap": [
                          "left",
                          "center",
                          "right"
                        ],
                        "group": "Block"
                      },
                      "type": "string",
                      "enum": [
                        "left",
                        "center",
                        "right"
                      ]
                    },
                    "fill": {
                      "title": "Fill",
                      "x-inspector": {
                        "label": "Fill",
                        "control": "color",
                        "snap": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ],
                        "group": "Block",
                        "help": "A plate fill behind the column; none unless set."
                      },
                      "description": "A plate fill behind the column; none unless set.",
                      "anyOf": [
                        {
                          "type": "string",
                          "enum": [
                            "ink",
                            "paper",
                            "ink-2",
                            "titanium",
                            "hair",
                            "hair-soft",
                            "plate",
                            "edge",
                            "green",
                            "amber",
                            "red",
                            "blue",
                            "accent"
                          ]
                        },
                        {
                          "type": "string",
                          "pattern": "^#[0-9a-fA-F]{6}$"
                        }
                      ]
                    }
                  },
                  "additionalProperties": false
                },
                "title": "Columns",
                "x-inspector": {
                  "label": "Columns",
                  "control": "json",
                  "group": "Layout",
                  "help": "One entry per column, 20 at most (R11 A8)."
                },
                "description": "One entry per column, 20 at most (R11 A8)."
              },
              "rows": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "cells": {
                      "minItems": 1,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "title": "Cell",
                        "x-inspector": {
                          "label": "Cell",
                          "control": "textarea",
                          "group": "Text"
                        }
                      }
                    },
                    "header": {
                      "title": "Header row",
                      "x-inspector": {
                        "label": "Header row",
                        "control": "toggle",
                        "group": "Block",
                        "help": "Display weight 500 with an ink rule under it."
                      },
                      "description": "Display weight 500 with an ink rule under it.",
                      "type": "boolean",
                      "const": true
                    },
                    "height": {
                      "title": "Row height",
                      "x-inspector": {
                        "label": "Row height",
                        "control": "number",
                        "group": "Layout",
                        "help": "The row height in px; the content height when absent."
                      },
                      "description": "The row height in px; the content height when absent.",
                      "type": "number",
                      "exclusiveMinimum": 0
                    }
                  },
                  "required": [
                    "cells"
                  ],
                  "additionalProperties": false
                },
                "title": "Rows",
                "x-inspector": {
                  "label": "Rows",
                  "control": "json",
                  "group": "Block",
                  "help": "One entry per row with one cell per column, 20 rows at most (R11 A8)."
                },
                "description": "One entry per row with one cell per column, 20 rows at most (R11 A8)."
              },
              "valign": {
                "title": "Vertical alignment",
                "x-inspector": {
                  "label": "Vertical alignment",
                  "control": "select",
                  "snap": [
                    "top",
                    "middle",
                    "bottom"
                  ],
                  "group": "Block"
                },
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              "border": {
                "type": "object",
                "properties": {
                  "weight": {
                    "type": "number",
                    "enum": [
                      0,
                      1,
                      1.5,
                      2
                    ],
                    "title": "Border weight",
                    "x-inspector": {
                      "label": "Border weight",
                      "control": "select",
                      "snap": [
                        0,
                        1,
                        1.5,
                        2
                      ],
                      "group": "Block",
                      "help": "1 is the sheet hairline, 1.5 the diagram stroke, 2 a plate edge; 0 removes the table’s rules."
                    },
                    "description": "1 is the sheet hairline, 1.5 the diagram stroke, 2 a plate edge; 0 removes the table’s rules."
                  },
                  "color": {
                    "title": "Border color",
                    "x-inspector": {
                      "label": "Border color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The rule color; the hairline token unless set."
                    },
                    "description": "The rule color; the hairline token unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "dash": {
                    "title": "Border dash",
                    "x-inspector": {
                      "label": "Border dash",
                      "control": "select",
                      "snap": [
                        "solid",
                        "dot",
                        "dash",
                        "dashDot",
                        "longDash",
                        "longDashDot"
                      ],
                      "group": "Block"
                    },
                    "type": "string",
                    "enum": [
                      "solid",
                      "dot",
                      "dash",
                      "dashDot",
                      "longDash",
                      "longDashDot"
                    ]
                  }
                },
                "required": [
                  "weight"
                ],
                "additionalProperties": false
              },
              "size": {
                "title": "Size",
                "x-inspector": {
                  "label": "Size",
                  "control": "select",
                  "snap": [
                    20,
                    18,
                    17,
                    16,
                    15
                  ],
                  "group": "Block",
                  "help": "The .rows ladder in px; 20 unless set."
                },
                "description": "The .rows ladder in px; 20 unless set.",
                "type": "number",
                "enum": [
                  20,
                  18,
                  17,
                  16,
                  15
                ]
              },
              "spans": {
                "title": "Merged cells",
                "x-inspector": {
                  "label": "Merged cells",
                  "control": "json",
                  "group": "Block",
                  "help": "Each entry is the anchor cell and how many rows and columns it spans; the covered cells keep their text."
                },
                "description": "Each entry is the anchor cell and how many rows and columns it spans; the covered cells keep their text.",
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "row": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "column": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "rows": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "columns": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "row",
                    "column",
                    "rows",
                    "columns"
                  ],
                  "additionalProperties": false
                }
              },
              "cells": {
                "title": "Cell styles",
                "x-inspector": {
                  "label": "Cell styles",
                  "control": "json",
                  "group": "Block",
                  "help": "Fill and border per cell."
                },
                "description": "Fill and border per cell.",
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "row": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "column": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "fill": {
                      "title": "Cell fill",
                      "x-inspector": {
                        "label": "Cell fill",
                        "control": "color",
                        "snap": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ],
                        "group": "Block",
                        "help": "A plate fill behind the cell; none unless set."
                      },
                      "description": "A plate fill behind the cell; none unless set.",
                      "anyOf": [
                        {
                          "type": "string",
                          "enum": [
                            "ink",
                            "paper",
                            "ink-2",
                            "titanium",
                            "hair",
                            "hair-soft",
                            "plate",
                            "edge",
                            "green",
                            "amber",
                            "red",
                            "blue",
                            "accent"
                          ]
                        },
                        {
                          "type": "string",
                          "pattern": "^#[0-9a-fA-F]{6}$"
                        }
                      ]
                    },
                    "border": {
                      "type": "object",
                      "properties": {
                        "color": {
                          "title": "Border color",
                          "x-inspector": {
                            "label": "Border color",
                            "control": "color",
                            "snap": [
                              "ink",
                              "paper",
                              "ink-2",
                              "titanium",
                              "hair",
                              "hair-soft",
                              "plate",
                              "edge",
                              "green",
                              "amber",
                              "red",
                              "blue",
                              "accent"
                            ],
                            "group": "Block",
                            "help": "The rule color; the hairline token unless set."
                          },
                          "description": "The rule color; the hairline token unless set.",
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "ink",
                                "paper",
                                "ink-2",
                                "titanium",
                                "hair",
                                "hair-soft",
                                "plate",
                                "edge",
                                "green",
                                "amber",
                                "red",
                                "blue",
                                "accent"
                              ]
                            },
                            {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            }
                          ]
                        },
                        "weight": {
                          "title": "Border weight",
                          "x-inspector": {
                            "label": "Border weight",
                            "control": "select",
                            "snap": [
                              0,
                              1,
                              1.5,
                              2
                            ],
                            "group": "Block",
                            "help": "0 draws no rule, 1 is the sheet hairline, 1.5 the diagram stroke, 2 a plate edge."
                          },
                          "description": "0 draws no rule, 1 is the sheet hairline, 1.5 the diagram stroke, 2 a plate edge.",
                          "type": "number",
                          "enum": [
                            0,
                            1,
                            1.5,
                            2
                          ]
                        },
                        "dash": {
                          "title": "Border dash",
                          "x-inspector": {
                            "label": "Border dash",
                            "control": "select",
                            "snap": [
                              "solid",
                              "dot",
                              "dash",
                              "dashDot",
                              "longDash",
                              "longDashDot"
                            ],
                            "group": "Block"
                          },
                          "type": "string",
                          "enum": [
                            "solid",
                            "dot",
                            "dash",
                            "dashDot",
                            "longDash",
                            "longDashDot"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "align": {
                      "title": "Cell align",
                      "x-inspector": {
                        "label": "Cell align",
                        "control": "select",
                        "snap": [
                          "left",
                          "center",
                          "right"
                        ],
                        "group": "Block",
                        "help": "The text alignment of this cell; the column’s alignment unless set."
                      },
                      "description": "The text alignment of this cell; the column’s alignment unless set.",
                      "type": "string",
                      "enum": [
                        "left",
                        "center",
                        "right"
                      ]
                    }
                  },
                  "required": [
                    "row",
                    "column"
                  ],
                  "additionalProperties": false
                }
              },
              "shadow": {
                "title": "Drop shadow",
                "x-inspector": {
                  "label": "Drop shadow",
                  "control": "json",
                  "group": "Block",
                  "help": "The drop shadow: colour, transparency, angle, distance and blur."
                },
                "description": "The drop shadow: colour, transparency, angle, distance and blur.",
                "type": "object",
                "properties": {
                  "color": {
                    "title": "Shadow color",
                    "x-inspector": {
                      "label": "Shadow color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The shadow’s colour; the ink unless set."
                    },
                    "description": "The shadow’s colour; the ink unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "opacity": {
                    "title": "Transparency",
                    "x-inspector": {
                      "label": "Transparency",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s opacity 0 to 1; 0.3 unless set."
                    },
                    "description": "The shadow’s opacity 0 to 1; 0.3 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "angle": {
                    "title": "Angle",
                    "x-inspector": {
                      "label": "Angle",
                      "control": "number",
                      "group": "Block",
                      "help": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set."
                    },
                    "description": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "distance": {
                    "title": "Distance",
                    "x-inspector": {
                      "label": "Distance",
                      "control": "number",
                      "group": "Block",
                      "help": "How far the shadow falls, in px; 8 unless set."
                    },
                    "description": "How far the shadow falls, in px; 8 unless set.",
                    "type": "number",
                    "minimum": 0
                  },
                  "blur": {
                    "title": "Blur radius",
                    "x-inspector": {
                      "label": "Blur radius",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s blur in px; 12 unless set."
                    },
                    "description": "The shadow’s blur in px; 12 unless set.",
                    "type": "number",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "type",
              "columns",
              "rows"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "chart"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "bar",
                  "column",
                  "line",
                  "pie"
                ],
                "title": "Chart type",
                "x-inspector": {
                  "label": "Chart type",
                  "control": "select",
                  "snap": [
                    "bar",
                    "column",
                    "line",
                    "pie"
                  ],
                  "group": "Block",
                  "help": "Bar, Column, Line or Pie; a pie keeps its first series."
                },
                "description": "Bar, Column, Line or Pie; a pie keeps its first series."
              },
              "categories": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string"
                },
                "title": "Categories",
                "x-inspector": {
                  "label": "Categories",
                  "control": "json",
                  "group": "Block",
                  "help": "One label per category, 12 at most."
                },
                "description": "One label per category, 12 at most."
              },
              "series": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "title": "Series name",
                      "x-inspector": {
                        "label": "Series name",
                        "control": "text",
                        "group": "Block"
                      }
                    },
                    "values": {
                      "type": "array",
                      "items": {
                        "type": "number"
                      },
                      "title": "Values",
                      "x-inspector": {
                        "label": "Values",
                        "control": "json",
                        "group": "Block",
                        "help": "One number per category."
                      },
                      "description": "One number per category."
                    },
                    "color": {
                      "title": "Series color",
                      "x-inspector": {
                        "label": "Series color",
                        "control": "color",
                        "snap": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ],
                        "group": "Block",
                        "help": "The bars, line or slices of the series; the palette order when absent."
                      },
                      "description": "The bars, line or slices of the series; the palette order when absent.",
                      "anyOf": [
                        {
                          "type": "string",
                          "enum": [
                            "ink",
                            "paper",
                            "ink-2",
                            "titanium",
                            "hair",
                            "hair-soft",
                            "plate",
                            "edge",
                            "green",
                            "amber",
                            "red",
                            "blue",
                            "accent"
                          ]
                        },
                        {
                          "type": "string",
                          "pattern": "^#[0-9a-fA-F]{6}$"
                        }
                      ]
                    }
                  },
                  "required": [
                    "name",
                    "values"
                  ],
                  "additionalProperties": false
                },
                "title": "Series",
                "x-inspector": {
                  "label": "Series",
                  "control": "json",
                  "group": "Block",
                  "help": "One entry per series with one value per category, 6 at most."
                },
                "description": "One entry per series with one value per category, 6 at most."
              },
              "title": {
                "title": "Title",
                "x-inspector": {
                  "label": "Title",
                  "control": "text",
                  "group": "Text"
                },
                "type": "string"
              },
              "legend": {
                "title": "Legend",
                "x-inspector": {
                  "label": "Legend",
                  "control": "select",
                  "snap": [
                    "none",
                    "right",
                    "bottom",
                    "top",
                    "left"
                  ],
                  "group": "Block",
                  "help": "Where the legend sits; right when absent."
                },
                "description": "Where the legend sits; right when absent.",
                "type": "string",
                "enum": [
                  "none",
                  "right",
                  "bottom",
                  "top",
                  "left"
                ]
              },
              "numberFormat": {
                "title": "Number format",
                "x-inspector": {
                  "label": "Number format",
                  "control": "select",
                  "snap": [
                    "plain",
                    "thousands",
                    "percent",
                    "currency"
                  ],
                  "group": "Block",
                  "help": "Plain, thousands separators, percent or currency on the axis and the values."
                },
                "description": "Plain, thousands separators, percent or currency on the axis and the values.",
                "type": "string",
                "enum": [
                  "plain",
                  "thousands",
                  "percent",
                  "currency"
                ]
              },
              "labels": {
                "title": "Show values",
                "x-inspector": {
                  "label": "Show values",
                  "control": "toggle",
                  "group": "Block"
                },
                "type": "boolean",
                "const": true
              },
              "height": {
                "title": "Height",
                "x-inspector": {
                  "label": "Height",
                  "control": "number",
                  "group": "Layout",
                  "help": "The height in a flow layout; on a positioned block the position box decides."
                },
                "description": "The height in a flow layout; on a positioned block the position box decides.",
                "type": "number",
                "exclusiveMinimum": 0
              },
              "shadow": {
                "title": "Drop shadow",
                "x-inspector": {
                  "label": "Drop shadow",
                  "control": "json",
                  "group": "Block",
                  "help": "The drop shadow: colour, transparency, angle, distance and blur."
                },
                "description": "The drop shadow: colour, transparency, angle, distance and blur.",
                "type": "object",
                "properties": {
                  "color": {
                    "title": "Shadow color",
                    "x-inspector": {
                      "label": "Shadow color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The shadow’s colour; the ink unless set."
                    },
                    "description": "The shadow’s colour; the ink unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "opacity": {
                    "title": "Transparency",
                    "x-inspector": {
                      "label": "Transparency",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s opacity 0 to 1; 0.3 unless set."
                    },
                    "description": "The shadow’s opacity 0 to 1; 0.3 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "angle": {
                    "title": "Angle",
                    "x-inspector": {
                      "label": "Angle",
                      "control": "number",
                      "group": "Block",
                      "help": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set."
                    },
                    "description": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "distance": {
                    "title": "Distance",
                    "x-inspector": {
                      "label": "Distance",
                      "control": "number",
                      "group": "Block",
                      "help": "How far the shadow falls, in px; 8 unless set."
                    },
                    "description": "How far the shadow falls, in px; 8 unless set.",
                    "type": "number",
                    "minimum": 0
                  },
                  "blur": {
                    "title": "Blur radius",
                    "x-inspector": {
                      "label": "Blur radius",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s blur in px; 12 unless set."
                    },
                    "description": "The shadow’s blur in px; 12 unless set.",
                    "type": "number",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "type",
              "kind",
              "categories",
              "series"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "picture"
              },
              "asset": {
                "anyOf": [
                  {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  {
                    "type": "string",
                    "const": ""
                  }
                ],
                "title": "Picture",
                "x-inspector": {
                  "label": "Picture",
                  "control": "asset",
                  "group": "Asset"
                }
              },
              "position": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "select",
                  "snap": [
                    "center",
                    "top",
                    "bottom"
                  ],
                  "group": "Layout",
                  "help": "Which part of the photograph the cover crop keeps; center unless set."
                },
                "description": "Which part of the photograph the cover crop keeps; center unless set.",
                "type": "string",
                "enum": [
                  "center",
                  "top",
                  "bottom"
                ]
              },
              "trim": {
                "title": "Crop",
                "x-inspector": {
                  "label": "Crop",
                  "control": "json",
                  "group": "Layout",
                  "help": "The crop offsets as fractions of the picture: { left, right, top, bottom }."
                },
                "description": "The crop offsets as fractions of the picture: { left, right, top, bottom }.",
                "type": "object",
                "properties": {
                  "left": {
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 1
                  },
                  "right": {
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 1
                  },
                  "top": {
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 1
                  },
                  "bottom": {
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 1
                  }
                },
                "required": [
                  "left",
                  "right",
                  "top",
                  "bottom"
                ],
                "additionalProperties": false
              },
              "mask": {
                "title": "Mask",
                "x-inspector": {
                  "label": "Mask",
                  "control": "select",
                  "snap": [
                    "rect",
                    "roundRect",
                    "snip1Rect",
                    "snip2SameRect",
                    "snip2DiagRect",
                    "snipRoundRect",
                    "round1Rect",
                    "round2SameRect",
                    "round2DiagRect",
                    "ellipse",
                    "triangle",
                    "rtTriangle",
                    "parallelogram",
                    "trapezoid",
                    "diamond",
                    "pentagon",
                    "hexagon",
                    "heptagon",
                    "octagon",
                    "decagon",
                    "dodecagon",
                    "pie",
                    "chord",
                    "teardrop",
                    "frame",
                    "halfFrame",
                    "corner",
                    "diagStripe",
                    "plus",
                    "plaque",
                    "can",
                    "cube",
                    "bevel",
                    "donut",
                    "noSmoking",
                    "blockArc",
                    "foldedCorner",
                    "smileyFace",
                    "heart",
                    "lightningBolt",
                    "sun",
                    "moon",
                    "cloud",
                    "arc",
                    "bracketPair",
                    "bracePair",
                    "leftBracket",
                    "rightBracket",
                    "leftBrace",
                    "rightBrace",
                    "flowChartProcess",
                    "flowChartAlternateProcess",
                    "flowChartDecision",
                    "flowChartInputOutput",
                    "flowChartPredefinedProcess",
                    "flowChartInternalStorage",
                    "flowChartDocument",
                    "flowChartMultidocument",
                    "flowChartTerminator",
                    "flowChartPreparation",
                    "flowChartManualInput",
                    "flowChartManualOperation",
                    "flowChartConnector",
                    "flowChartOffpageConnector",
                    "flowChartPunchedCard",
                    "flowChartPunchedTape",
                    "flowChartSummingJunction",
                    "flowChartOr",
                    "flowChartCollate",
                    "flowChartSort",
                    "flowChartExtract",
                    "flowChartMerge",
                    "flowChartOfflineStorage",
                    "flowChartOnlineStorage",
                    "flowChartMagneticTape",
                    "flowChartMagneticDisk",
                    "flowChartMagneticDrum",
                    "flowChartDelay",
                    "flowChartDisplay",
                    "star4",
                    "star5",
                    "star6",
                    "star7",
                    "star8",
                    "star10",
                    "star12",
                    "star16",
                    "star24",
                    "star32",
                    "irregularSeal1",
                    "irregularSeal2",
                    "ribbon",
                    "ribbon2",
                    "ellipseRibbon",
                    "ellipseRibbon2",
                    "verticalScroll",
                    "horizontalScroll",
                    "wave",
                    "doubleWave",
                    "rightArrow",
                    "leftArrow",
                    "upArrow",
                    "downArrow",
                    "leftRightArrow",
                    "upDownArrow",
                    "quadArrow",
                    "leftRightUpArrow",
                    "bentArrow",
                    "uturnArrow",
                    "leftUpArrow",
                    "bentUpArrow",
                    "curvedRightArrow",
                    "curvedLeftArrow",
                    "curvedUpArrow",
                    "curvedDownArrow",
                    "stripedRightArrow",
                    "notchedRightArrow",
                    "homePlate",
                    "chevron",
                    "rightArrowCallout",
                    "downArrowCallout",
                    "leftArrowCallout",
                    "upArrowCallout",
                    "leftRightArrowCallout",
                    "quadArrowCallout",
                    "wedgeRectCallout",
                    "wedgeRoundRectCallout",
                    "wedgeEllipseCallout",
                    "cloudCallout",
                    "mathPlus",
                    "mathMinus",
                    "mathMultiply",
                    "mathDivide",
                    "mathEqual",
                    "mathNotEqual"
                  ],
                  "group": "Layout",
                  "help": "A closed shape the picture is clipped to."
                },
                "description": "A closed shape the picture is clipped to.",
                "type": "string"
              },
              "adjust": {
                "title": "Adjustments",
                "x-inspector": {
                  "label": "Adjustments",
                  "control": "json",
                  "group": "Block",
                  "help": "Transparency 0 to 1, brightness and contrast -1 to 1."
                },
                "description": "Transparency 0 to 1, brightness and contrast -1 to 1.",
                "type": "object",
                "properties": {
                  "transparency": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "brightness": {
                    "type": "number",
                    "minimum": -1,
                    "maximum": 1
                  },
                  "contrast": {
                    "type": "number",
                    "minimum": -1,
                    "maximum": 1
                  }
                },
                "additionalProperties": false
              },
              "frame": {
                "title": "Frame",
                "x-inspector": {
                  "label": "Frame",
                  "control": "json",
                  "group": "Block",
                  "help": "The picture’s border: weight, colour and dash."
                },
                "description": "The picture’s border: weight, colour and dash.",
                "type": "object",
                "properties": {
                  "weight": {
                    "type": "number",
                    "enum": [
                      1,
                      1.5,
                      2,
                      3,
                      4,
                      8,
                      12
                    ]
                  },
                  "color": {
                    "title": "Frame color",
                    "x-inspector": {
                      "label": "Frame color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The frame colour; the hairline token unless set."
                    },
                    "description": "The frame colour; the hairline token unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "dash": {
                    "title": "Dash",
                    "x-inspector": {
                      "label": "Dash",
                      "control": "select",
                      "snap": [
                        "solid",
                        "dot",
                        "dash",
                        "dashDot",
                        "longDash",
                        "longDashDot"
                      ],
                      "group": "Block",
                      "help": "Solid, dot, dash, dash dot, long dash or long dash dot."
                    },
                    "description": "Solid, dot, dash, dash dot, long dash or long dash dot.",
                    "type": "string",
                    "enum": [
                      "solid",
                      "dot",
                      "dash",
                      "dashDot",
                      "longDash",
                      "longDashDot"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "shadow": {
                "title": "Drop shadow",
                "x-inspector": {
                  "label": "Drop shadow",
                  "control": "json",
                  "group": "Block",
                  "help": "The drop shadow: colour, transparency, angle, distance and blur."
                },
                "description": "The drop shadow: colour, transparency, angle, distance and blur.",
                "type": "object",
                "properties": {
                  "color": {
                    "title": "Shadow color",
                    "x-inspector": {
                      "label": "Shadow color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The shadow’s colour; the ink unless set."
                    },
                    "description": "The shadow’s colour; the ink unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "opacity": {
                    "title": "Transparency",
                    "x-inspector": {
                      "label": "Transparency",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s opacity 0 to 1; 0.3 unless set."
                    },
                    "description": "The shadow’s opacity 0 to 1; 0.3 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "angle": {
                    "title": "Angle",
                    "x-inspector": {
                      "label": "Angle",
                      "control": "number",
                      "group": "Block",
                      "help": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set."
                    },
                    "description": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "distance": {
                    "title": "Distance",
                    "x-inspector": {
                      "label": "Distance",
                      "control": "number",
                      "group": "Block",
                      "help": "How far the shadow falls, in px; 8 unless set."
                    },
                    "description": "How far the shadow falls, in px; 8 unless set.",
                    "type": "number",
                    "minimum": 0
                  },
                  "blur": {
                    "title": "Blur radius",
                    "x-inspector": {
                      "label": "Blur radius",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s blur in px; 12 unless set."
                    },
                    "description": "The shadow’s blur in px; 12 unless set.",
                    "type": "number",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              },
              "dither": {
                "title": "Dither",
                "x-inspector": {
                  "label": "Dither",
                  "control": "json",
                  "group": "Block",
                  "help": "The deck’s two tone screen over the picture’s continuous source; present means on."
                },
                "description": "The deck’s two tone screen over the picture’s continuous source; present means on.",
                "type": "object",
                "properties": {
                  "pattern": {
                    "type": "string",
                    "enum": [
                      "bayer8",
                      "bayer4",
                      "blue64",
                      "random"
                    ],
                    "title": "Pattern",
                    "x-inspector": {
                      "label": "Pattern",
                      "control": "select",
                      "snap": [
                        "bayer8",
                        "bayer4",
                        "blue64",
                        "random"
                      ],
                      "group": "Block",
                      "help": "The threshold texture; Bayer 8 by 8 is the deck’s two tone screen."
                    },
                    "description": "The threshold texture; Bayer 8 by 8 is the deck’s two tone screen."
                  },
                  "tone": {
                    "title": "Tone",
                    "x-inspector": {
                      "label": "Tone",
                      "control": "select",
                      "snap": [
                        "two",
                        "three",
                        "original"
                      ],
                      "group": "Block",
                      "help": "Ink and paper (two), three tones with titanium in the middle, or the picture’s own colours posterised (original)."
                    },
                    "description": "Ink and paper (two), three tones with titanium in the middle, or the picture’s own colours posterised (original).",
                    "type": "string",
                    "enum": [
                      "two",
                      "three",
                      "original"
                    ]
                  },
                  "steps": {
                    "title": "Steps",
                    "x-inspector": {
                      "label": "Steps",
                      "control": "number",
                      "snap": [
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                      ],
                      "group": "Block",
                      "help": "The colour steps for the original tone, 2 to 7; 4 unless set."
                    },
                    "description": "The colour steps for the original tone, 2 to 7; 4 unless set.",
                    "type": "integer",
                    "minimum": 2,
                    "maximum": 7
                  },
                  "cell": {
                    "title": "Cell",
                    "x-inspector": {
                      "label": "Cell",
                      "control": "select",
                      "snap": [
                        1,
                        2,
                        3,
                        4
                      ],
                      "group": "Block",
                      "help": "Sheet pixels per cell; 2 is the deck’s cell."
                    },
                    "description": "Sheet pixels per cell; 2 is the deck’s cell.",
                    "type": "number",
                    "enum": [
                      1,
                      2,
                      3,
                      4
                    ]
                  },
                  "strength": {
                    "title": "Strength",
                    "x-inspector": {
                      "label": "Strength",
                      "control": "number",
                      "group": "Block",
                      "help": "The dithered plane’s opacity over the continuous picture, 0 to 1; 1 is the pure two tone."
                    },
                    "description": "The dithered plane’s opacity over the continuous picture, 0 to 1; 1 is the pure two tone.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "black": {
                    "title": "Black point",
                    "x-inspector": {
                      "label": "Black point",
                      "control": "number",
                      "group": "Block",
                      "help": "Values at or below it become ink; 0 unless set, 120 in the Photograph preset."
                    },
                    "description": "Values at or below it become ink; 0 unless set, 120 in the Photograph preset.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 255
                  },
                  "white": {
                    "title": "White point",
                    "x-inspector": {
                      "label": "White point",
                      "control": "number",
                      "group": "Block",
                      "help": "Values at or above it become paper; 255 unless set, 230 in the Photograph preset."
                    },
                    "description": "Values at or above it become paper; 255 unless set, 230 in the Photograph preset.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 255
                  },
                  "gamma": {
                    "title": "Gamma",
                    "x-inspector": {
                      "label": "Gamma",
                      "control": "number",
                      "group": "Block",
                      "help": "The midtones, 0.5 to 2; below 1 lifts them; 1 unless set, 0.9 in the Photograph preset."
                    },
                    "description": "The midtones, 0.5 to 2; below 1 lifts them; 1 unless set, 0.9 in the Photograph preset.",
                    "type": "number",
                    "minimum": 0.5,
                    "maximum": 2
                  },
                  "invert": {
                    "title": "Invert",
                    "x-inspector": {
                      "label": "Invert",
                      "control": "toggle",
                      "group": "Block",
                      "help": "Inverts the source before the tone stages, for a light render."
                    },
                    "description": "Inverts the source before the tone stages, for a light render.",
                    "type": "boolean"
                  },
                  "polarity": {
                    "title": "Polarity",
                    "x-inspector": {
                      "label": "Polarity",
                      "control": "select",
                      "snap": [
                        "auto",
                        "dark-ground",
                        "light-ground",
                        "same"
                      ],
                      "group": "Block",
                      "help": "Which theme the positive image serves; auto picks dark ground when the lit fraction is under 0.5; same writes one neutral variant."
                    },
                    "description": "Which theme the positive image serves; auto picks dark ground when the lit fraction is under 0.5; same writes one neutral variant.",
                    "type": "string",
                    "enum": [
                      "auto",
                      "dark-ground",
                      "light-ground",
                      "same"
                    ]
                  },
                  "blur": {
                    "title": "Blur",
                    "x-inspector": {
                      "label": "Blur",
                      "control": "number",
                      "group": "Advanced",
                      "help": "A blur in source pixels of the 1800 px scaled source, 0 to 8."
                    },
                    "description": "A blur in source pixels of the 1800 px scaled source, 0 to 8.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 8
                  },
                  "minFilter": {
                    "title": "Thicken",
                    "x-inspector": {
                      "label": "Thicken",
                      "control": "number",
                      "group": "Advanced",
                      "help": "A minimum filter radius in source pixels, 0 to 9."
                    },
                    "description": "A minimum filter radius in source pixels, 0 to 9.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 9
                  },
                  "channel": {
                    "title": "Channel",
                    "x-inspector": {
                      "label": "Channel",
                      "control": "select",
                      "snap": [
                        "gray",
                        "r",
                        "g",
                        "b"
                      ],
                      "group": "Advanced",
                      "help": "The channel read as the tone; gray unless set."
                    },
                    "description": "The channel read as the tone; gray unless set.",
                    "type": "string",
                    "enum": [
                      "gray",
                      "r",
                      "g",
                      "b"
                    ]
                  },
                  "seed": {
                    "title": "Seed",
                    "x-inspector": {
                      "label": "Seed",
                      "control": "number",
                      "group": "Advanced",
                      "help": "The hash seed of the random pattern, a 32 bit integer; 0 unless set so two writers agree."
                    },
                    "description": "The hash seed of the random pattern, a 32 bit integer; 0 unless set so two writers agree.",
                    "type": "integer",
                    "minimum": -2147483648,
                    "maximum": 2147483647
                  }
                },
                "required": [
                  "pattern"
                ],
                "additionalProperties": false
              },
              "side": {
                "title": "Plate side",
                "x-inspector": {
                  "label": "Plate side",
                  "control": "select",
                  "snap": [
                    "lower-left",
                    "lower-right",
                    "upper-left"
                  ],
                  "group": "Layout",
                  "help": "The plate side a material recipe composes for, written when a picture slide is arranged by hand."
                },
                "description": "The plate side a material recipe composes for, written when a picture slide is arranged by hand.",
                "type": "string",
                "enum": [
                  "lower-left",
                  "lower-right",
                  "upper-left"
                ]
              }
            },
            "required": [
              "id",
              "type",
              "asset"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "alt": {
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "textarea",
                  "group": "Text",
                  "help": "The description a screen reader and the export read; a picture keeps its description on the asset."
                },
                "description": "The description a screen reader and the export read; a picture keeps its description on the asset.",
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "html"
              },
              "css": {
                "type": "string",
                "title": "CSS",
                "x-inspector": {
                  "label": "CSS",
                  "control": "textarea",
                  "group": "Advanced",
                  "help": "Scoped by the renderer under .ts-x-<slideId>-<blockId> (SPEC 5.2)."
                },
                "description": "Scoped by the renderer under .ts-x-<slideId>-<blockId> (SPEC 5.2)."
              },
              "html": {
                "type": "string",
                "title": "HTML",
                "x-inspector": {
                  "label": "HTML",
                  "control": "textarea",
                  "group": "Advanced"
                }
              },
              "note": {
                "type": "string",
                "minLength": 1,
                "title": "Why the escape",
                "x-inspector": {
                  "label": "Why the escape",
                  "control": "textarea",
                  "group": "Advanced",
                  "help": "What the grammar cannot express here; the count of these blocks is the grammar’s honest scope (SPEC 1)."
                },
                "description": "What the grammar cannot express here; the count of these blocks is the grammar’s honest scope (SPEC 1)."
              },
              "htmlSanitized": {
                "title": "Sanitized",
                "x-inspector": {
                  "label": "Sanitized",
                  "control": "readonly",
                  "group": "Advanced",
                  "help": "Set by the sanitizer once the markup passed DOMPurify and the CSS tokenizer; the linter flags a block without it."
                },
                "description": "Set by the sanitizer once the markup passed DOMPurify and the CSS tokenizer; the linter flags a block without it.",
                "type": "boolean",
                "const": true
              }
            },
            "required": [
              "id",
              "type",
              "css",
              "html",
              "note"
            ],
            "additionalProperties": false
          }
        ]
      },
      "Icon": {
        "$id": "#/components/schemas/Icon",
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "enum": [
              "gt-mark",
              "check-circle",
              "x-circle",
              "clock",
              "exclamation-circle",
              "arrow-top-right-on-square",
              "arrow-right",
              "arrow-up",
              "swatch",
              "document-text",
              "sparkles",
              "globe-alt",
              "signal",
              "folder",
              "presentation-chart-bar",
              "play",
              "arrows-right-left",
              "arrows-up-down",
              "archive-box",
              "bolt",
              "rectangle-stack",
              "list-bullet",
              "photo",
              "cube",
              "map",
              "key",
              "lock-open",
              "star",
              "book-open",
              "squares-2x2",
              "code-bracket",
              "command-line",
              "building-office-2",
              "briefcase",
              "user-group",
              "user-circle",
              "scale",
              "finger-print",
              "eye",
              "eye-slash",
              "pencil-square",
              "chat-bubble-left-right",
              "clipboard-document-check",
              "wrench-screwdriver",
              "cog-6-tooth",
              "pause-circle",
              "adjustments-horizontal",
              "plus",
              "device-phone-mobile",
              "language",
              "table-cells",
              "envelope",
              "server",
              "paint-brush",
              "home",
              "tag",
              "newspaper",
              "magnifying-glass",
              "rocket-launch",
              "check-badge",
              "beaker",
              "bars-3",
              "view-columns",
              "identification",
              "lock-closed",
              "bars-3-bottom-left",
              "bars-3-center-left",
              "bars-3-bottom-right",
              "bell",
              "inbox",
              "cursor-arrow-rays",
              "arrow-down-tray"
            ],
            "title": "Icon",
            "x-inspector": {
              "label": "Icon",
              "control": "icon",
              "group": "Block"
            }
          },
          "color": {
            "title": "Icon color",
            "x-inspector": {
              "label": "Icon color",
              "control": "select",
              "snap": [
                "ok",
                "warn",
                "no",
                "info"
              ],
              "group": "Block",
              "help": "Semantic color lives only on icons (DECK-GRAMMAR.md:30)."
            },
            "description": "Semantic color lives only on icons (DECK-GRAMMAR.md:30).",
            "type": "string",
            "enum": [
              "ok",
              "warn",
              "no",
              "info"
            ]
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "Asset": {
        "$id": "#/components/schemas/Asset",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "role": {
            "type": "string",
            "enum": [
              "opener",
              "mood",
              "capture",
              "detail",
              "thumb",
              "render",
              "icon",
              "logo",
              "frame",
              "other"
            ],
            "title": "Role",
            "x-inspector": {
              "label": "Role",
              "control": "select",
              "snap": [
                "opener",
                "mood",
                "capture",
                "detail",
                "thumb",
                "render",
                "icon",
                "logo",
                "frame",
                "other"
              ],
              "group": "Asset"
            }
          },
          "alt": {
            "type": "string",
            "title": "Alt text",
            "x-inspector": {
              "label": "Alt text",
              "control": "textarea",
              "group": "Asset"
            }
          },
          "kind": {
            "type": "string",
            "const": "svg"
          },
          "vector": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "light": {
                    "type": "string",
                    "minLength": 1
                  },
                  "dark": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "light",
                  "dark"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "neutral": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "neutral"
                ],
                "additionalProperties": false
              }
            ]
          },
          "twins": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "light": {
                    "type": "string",
                    "minLength": 1
                  },
                  "dark": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "light",
                  "dark"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "neutral": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "neutral"
                ],
                "additionalProperties": false
              }
            ]
          },
          "size": {
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2
          },
          "scale": {
            "type": "number",
            "enum": [
              1,
              2,
              3
            ],
            "title": "Scale",
            "x-inspector": {
              "label": "Scale",
              "control": "select",
              "snap": [
                1,
                2,
                3
              ],
              "group": "Asset"
            }
          },
          "source": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "material"
                  },
                  "materialId": {
                    "type": "string",
                    "minLength": 1
                  },
                  "uniforms": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "array",
                          "items": {
                            "type": "number"
                          }
                        },
                        {
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "size": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      }
                    ],
                    "items": false,
                    "minItems": 2,
                    "maxItems": 2
                  },
                  "timeMs": {
                    "type": "number",
                    "minimum": 0
                  },
                  "backend": {
                    "type": "string",
                    "enum": [
                      "angle-metal",
                      "swiftshader",
                      "client"
                    ]
                  },
                  "renderer": {
                    "type": "string"
                  },
                  "recipeKey": {
                    "type": "string"
                  },
                  "frameKey": {
                    "type": "string"
                  }
                },
                "required": [
                  "kind",
                  "materialId",
                  "uniforms",
                  "size",
                  "timeMs",
                  "backend",
                  "renderer",
                  "recipeKey"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "capture"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "viewport": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number",
                        "const": 1440
                      },
                      {
                        "type": "number",
                        "const": 900
                      }
                    ],
                    "items": false,
                    "minItems": 2,
                    "maxItems": 2
                  },
                  "scale": {
                    "type": "number",
                    "const": 2
                  },
                  "theme": {
                    "type": "string",
                    "enum": [
                      "light",
                      "dark",
                      "both"
                    ]
                  },
                  "region": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      }
                    ],
                    "items": false,
                    "minItems": 4,
                    "maxItems": 4
                  },
                  "recipe": {
                    "type": "string"
                  }
                },
                "required": [
                  "kind",
                  "url",
                  "viewport",
                  "scale",
                  "theme",
                  "recipe"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "photo"
                  },
                  "origin": {
                    "type": "string",
                    "minLength": 1
                  },
                  "title": {
                    "type": "string"
                  },
                  "artist": {
                    "type": "string"
                  },
                  "license": {
                    "type": "string",
                    "minLength": 1
                  },
                  "shareAlike": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "kind",
                  "origin",
                  "license",
                  "shareAlike"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "file"
                  },
                  "sanitized": {
                    "type": "object",
                    "properties": {
                      "removed": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "removed"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "logo"
                  },
                  "provider": {
                    "type": "string",
                    "const": "thesvg"
                  },
                  "slug": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "variant": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "license": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 400
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "guidelines": {
                    "type": "string",
                    "format": "uri"
                  },
                  "fetchedAt": {
                    "type": "string",
                    "minLength": 1
                  },
                  "digest": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{8,64}$"
                  },
                  "sanitized": {
                    "type": "object",
                    "properties": {
                      "removed": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "removed"
                    ],
                    "additionalProperties": false
                  },
                  "tint": {
                    "type": "object",
                    "properties": {
                      "light": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "dark": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind",
                  "provider",
                  "slug",
                  "variant",
                  "title",
                  "license",
                  "fetchedAt",
                  "digest"
                ],
                "additionalProperties": false
              }
            ]
          },
          "treatment": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "two-tone"
                  },
                  "crop": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      }
                    ],
                    "items": false,
                    "minItems": 4,
                    "maxItems": 4,
                    "title": "Crop",
                    "x-inspector": {
                      "label": "Crop",
                      "control": "json",
                      "group": "Asset",
                      "help": "x, y, width, height in source pixels; may reach past the source, which pads with the ground."
                    },
                    "description": "x, y, width, height in source pixels; may reach past the source, which pads with the ground."
                  },
                  "channel": {
                    "title": "Channel",
                    "x-inspector": {
                      "label": "Channel",
                      "control": "select",
                      "snap": [
                        "gray",
                        "r",
                        "g",
                        "b"
                      ],
                      "group": "Asset"
                    },
                    "type": "string",
                    "enum": [
                      "gray",
                      "r",
                      "g",
                      "b"
                    ]
                  },
                  "invert": {
                    "title": "Invert",
                    "x-inspector": {
                      "label": "Invert",
                      "control": "toggle",
                      "group": "Asset"
                    },
                    "type": "boolean"
                  },
                  "blur": {
                    "title": "Blur",
                    "x-inspector": {
                      "label": "Blur",
                      "control": "number",
                      "group": "Asset"
                    },
                    "type": "number",
                    "minimum": 0
                  },
                  "autocontrast": {
                    "type": "number",
                    "const": 0.5
                  },
                  "black": {
                    "title": "Black point",
                    "x-inspector": {
                      "label": "Black point",
                      "control": "number",
                      "group": "Asset"
                    },
                    "type": "number",
                    "minimum": 0,
                    "maximum": 255
                  },
                  "white": {
                    "title": "White point",
                    "x-inspector": {
                      "label": "White point",
                      "control": "number",
                      "group": "Asset"
                    },
                    "type": "number",
                    "minimum": 0,
                    "maximum": 255
                  },
                  "gamma": {
                    "title": "Gamma",
                    "x-inspector": {
                      "label": "Gamma",
                      "control": "number",
                      "group": "Asset"
                    },
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "minFilter": {
                    "title": "Min filter",
                    "x-inspector": {
                      "label": "Min filter",
                      "control": "number",
                      "group": "Asset"
                    },
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "unsharp": {
                    "type": "object",
                    "properties": {
                      "rows": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          }
                        ],
                        "items": false,
                        "minItems": 2,
                        "maxItems": 2
                      },
                      "amount": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "rows",
                      "amount"
                    ],
                    "additionalProperties": false
                  },
                  "polarity": {
                    "type": "string",
                    "enum": [
                      "dark-ground",
                      "light-ground"
                    ],
                    "title": "Polarity",
                    "x-inspector": {
                      "label": "Polarity",
                      "control": "select",
                      "snap": [
                        "dark-ground",
                        "light-ground"
                      ],
                      "group": "Asset"
                    }
                  },
                  "cell": {
                    "type": "number",
                    "const": 2
                  },
                  "bayer": {
                    "type": "number",
                    "const": 8
                  },
                  "resampler": {
                    "type": "string",
                    "const": "lanczos3"
                  }
                },
                "required": [
                  "kind",
                  "crop",
                  "autocontrast",
                  "polarity",
                  "cell",
                  "bayer",
                  "resampler"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "continuous"
                  },
                  "quality": {
                    "type": "number",
                    "enum": [
                      88,
                      92,
                      95
                    ],
                    "title": "JPEG quality",
                    "x-inspector": {
                      "label": "JPEG quality",
                      "control": "select",
                      "snap": [
                        88,
                        92,
                        95
                      ],
                      "group": "Asset"
                    }
                  }
                },
                "required": [
                  "kind",
                  "quality"
                ],
                "additionalProperties": false
              }
            ]
          },
          "sourceFile": {
            "type": "string",
            "minLength": 1
          },
          "credit": {
            "title": "Credit",
            "x-inspector": {
              "label": "Credit",
              "control": "text",
              "group": "Asset",
              "help": "Must appear on the plate for share-alike sources (OPENERS.md:255)."
            },
            "description": "Must appear on the plate for share-alike sources (OPENERS.md:255).",
            "type": "string"
          },
          "inline": {
            "type": "string",
            "enum": [
              "native",
              "resample-1280",
              "two-color",
              "pass-through"
            ],
            "title": "Inline rule",
            "x-inspector": {
              "label": "Inline rule",
              "control": "select",
              "snap": [
                "native",
                "resample-1280",
                "two-color",
                "pass-through"
              ],
              "group": "Asset",
              "help": "How the standalone build embeds the file (build-deck.mjs:72-76)."
            },
            "description": "How the standalone build embeds the file (build-deck.mjs:72-76)."
          },
          "metrics": {
            "type": "object",
            "properties": {
              "litFraction": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "plateClear": {
                "type": "object",
                "properties": {
                  "plate": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      }
                    ],
                    "items": false,
                    "minItems": 4,
                    "maxItems": 4
                  },
                  "nearestLitPx": {
                    "type": "number",
                    "minimum": 0
                  },
                  "litUnder": {
                    "type": "number",
                    "minimum": 0
                  },
                  "litInBand": {
                    "type": "number",
                    "minimum": 0
                  }
                },
                "required": [
                  "plate",
                  "nearestLitPx",
                  "litUnder",
                  "litInBand"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "litFraction"
            ],
            "additionalProperties": false
          },
          "variants": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "pattern": "^[0-9a-f]{64}$"
            },
            "additionalProperties": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string",
                  "pattern": "^[0-9a-f]{64}$"
                },
                "twins": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "light": {
                          "type": "string",
                          "minLength": 1
                        },
                        "dark": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "light",
                        "dark"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "neutral": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "neutral"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "size": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    }
                  ],
                  "items": false,
                  "minItems": 2,
                  "maxItems": 2
                },
                "scale": {
                  "type": "number",
                  "enum": [
                    1,
                    2
                  ]
                },
                "metrics": {
                  "type": "object",
                  "properties": {
                    "litFraction": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    "plateClear": {
                      "type": "object",
                      "properties": {
                        "plate": {
                          "type": "array",
                          "prefixItems": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            }
                          ],
                          "items": false,
                          "minItems": 4,
                          "maxItems": 4
                        },
                        "nearestLitPx": {
                          "type": "number",
                          "minimum": 0
                        },
                        "litUnder": {
                          "type": "number",
                          "minimum": 0
                        },
                        "litInBand": {
                          "type": "number",
                          "minimum": 0
                        }
                      },
                      "required": [
                        "plate",
                        "nearestLitPx",
                        "litUnder",
                        "litInBand"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "litFraction"
                  ],
                  "additionalProperties": false
                },
                "producedAt": {
                  "type": "string"
                }
              },
              "required": [
                "key",
                "twins",
                "size",
                "scale",
                "producedAt"
              ],
              "additionalProperties": false
            }
          },
          "ext": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          }
        },
        "required": [
          "id",
          "role",
          "alt",
          "twins",
          "size",
          "scale",
          "source",
          "inline"
        ],
        "additionalProperties": false
      },
      "Mutation": {
        "$id": "#/components/schemas/Mutation",
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "slide.insert"
              },
              "sectionId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "after": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "slide": {
                "$ref": "#/components/schemas/Slide"
              }
            },
            "required": [
              "op",
              "sectionId",
              "slide"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "slide.remove"
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              }
            },
            "required": [
              "op",
              "slideId"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "slide.move"
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "sectionId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "after": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              }
            },
            "required": [
              "op",
              "slideId",
              "sectionId"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "slide.set"
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "path": {
                "type": "string",
                "pattern": "^(\\/.*)?$"
              },
              "value": {}
            },
            "required": [
              "op",
              "slideId",
              "path"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "slide.replace"
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "slide": {
                "$ref": "#/components/schemas/Slide"
              }
            },
            "required": [
              "op",
              "slideId",
              "slide"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "block.insert"
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "slot": {
                "type": "string",
                "enum": [
                  "main",
                  "head",
                  "headLeft",
                  "headRight",
                  "body",
                  "left",
                  "right",
                  "plate"
                ]
              },
              "after": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$"
              },
              "block": {
                "$ref": "#/components/schemas/Block"
              }
            },
            "required": [
              "op",
              "slideId",
              "slot",
              "block"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "block.remove"
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "blockId": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$"
              }
            },
            "required": [
              "op",
              "slideId",
              "blockId"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "block.move"
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "blockId": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$"
              },
              "slot": {
                "type": "string",
                "enum": [
                  "main",
                  "head",
                  "headLeft",
                  "headRight",
                  "body",
                  "left",
                  "right",
                  "plate"
                ]
              },
              "after": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$"
              },
              "z": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "op",
              "slideId",
              "blockId",
              "slot"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "block.set"
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "blockId": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$"
              },
              "path": {
                "type": "string",
                "pattern": "^(\\/.*)?$"
              },
              "value": {}
            },
            "required": [
              "op",
              "slideId",
              "blockId",
              "path"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "text.replace"
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "blockId": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$"
              },
              "path": {
                "type": "string",
                "pattern": "^(\\/.*)?$"
              },
              "range": {
                "type": "array",
                "prefixItems": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                ],
                "items": false,
                "minItems": 2,
                "maxItems": 2
              },
              "text": {
                "type": "string"
              }
            },
            "required": [
              "op",
              "slideId",
              "blockId",
              "path",
              "range",
              "text"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "text.splice"
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "blockId": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$"
              },
              "path": {
                "type": "string",
                "pattern": "^(\\/.*)?$"
              },
              "at": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "remove": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "insert": {
                "type": "string"
              },
              "flags": {
                "type": "object",
                "properties": {
                  "i": {
                    "type": "boolean",
                    "const": true
                  },
                  "u": {
                    "type": "boolean",
                    "const": true
                  },
                  "s": {
                    "type": "boolean",
                    "const": true
                  },
                  "sup": {
                    "type": "boolean",
                    "const": true
                  },
                  "sub": {
                    "type": "boolean",
                    "const": true
                  },
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "hl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "size": {
                    "type": "integer",
                    "minimum": 6,
                    "maximum": 200
                  },
                  "b": {
                    "type": "boolean",
                    "const": true
                  },
                  "link": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "op",
              "slideId",
              "blockId",
              "path",
              "at",
              "remove",
              "insert"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "text.mark"
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "blockId": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$"
              },
              "path": {
                "type": "string",
                "pattern": "^(\\/.*)?$"
              },
              "range": {
                "type": "array",
                "prefixItems": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                ],
                "items": false,
                "minItems": 2,
                "maxItems": 2
              },
              "edit": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "marks"
                      },
                      "set": {
                        "type": "object",
                        "properties": {
                          "i": {
                            "type": "boolean",
                            "const": true
                          },
                          "u": {
                            "type": "boolean",
                            "const": true
                          },
                          "s": {
                            "type": "boolean",
                            "const": true
                          },
                          "sup": {
                            "type": "boolean",
                            "const": true
                          },
                          "sub": {
                            "type": "boolean",
                            "const": true
                          },
                          "color": {
                            "anyOf": [
                              {
                                "type": "string",
                                "enum": [
                                  "ink",
                                  "paper",
                                  "ink-2",
                                  "titanium",
                                  "hair",
                                  "hair-soft",
                                  "plate",
                                  "edge",
                                  "green",
                                  "amber",
                                  "red",
                                  "blue",
                                  "accent"
                                ]
                              },
                              {
                                "type": "string",
                                "pattern": "^#[0-9a-fA-F]{6}$"
                              }
                            ]
                          },
                          "hl": {
                            "anyOf": [
                              {
                                "type": "string",
                                "enum": [
                                  "ink",
                                  "paper",
                                  "ink-2",
                                  "titanium",
                                  "hair",
                                  "hair-soft",
                                  "plate",
                                  "edge",
                                  "green",
                                  "amber",
                                  "red",
                                  "blue",
                                  "accent"
                                ]
                              },
                              {
                                "type": "string",
                                "pattern": "^#[0-9a-fA-F]{6}$"
                              }
                            ]
                          },
                          "size": {
                            "type": "integer",
                            "minimum": 6,
                            "maximum": 200
                          },
                          "b": {
                            "type": "boolean",
                            "const": true
                          },
                          "link": {
                            "type": "string",
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      },
                      "clear": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "i",
                            "u",
                            "s",
                            "sup",
                            "sub",
                            "color",
                            "hl",
                            "size",
                            "b",
                            "link"
                          ]
                        }
                      }
                    },
                    "required": [
                      "kind"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "case"
                      },
                      "mode": {
                        "type": "string",
                        "enum": [
                          "lower",
                          "upper",
                          "title"
                        ]
                      }
                    },
                    "required": [
                      "kind",
                      "mode"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "required": [
              "op",
              "slideId",
              "blockId",
              "path",
              "range",
              "edit"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "section.set"
              },
              "sections": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Section"
                }
              }
            },
            "required": [
              "op",
              "sections"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "asset.set"
              },
              "asset": {
                "$ref": "#/components/schemas/Asset"
              }
            },
            "required": [
              "op",
              "asset"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "asset.remove"
              },
              "assetId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              }
            },
            "required": [
              "op",
              "assetId"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "deck.set"
              },
              "path": {
                "type": "string",
                "pattern": "^(\\/.*)?$"
              },
              "value": {}
            },
            "required": [
              "op",
              "path"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "op": {
                "type": "string",
                "const": "version.restore"
              },
              "n": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "op",
              "n"
            ],
            "additionalProperties": false
          }
        ]
      },
      "Write": {
        "$id": "#/components/schemas/Write",
        "type": "object",
        "properties": {
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "author": {
            "$ref": "#/components/schemas/Author"
          },
          "note": {
            "type": "string"
          },
          "mutations": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Mutation"
            }
          }
        },
        "required": [
          "baseRevision",
          "author",
          "mutations"
        ],
        "additionalProperties": false
      },
      "Author": {
        "$id": "#/components/schemas/Author",
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "human",
              "agent"
            ]
          },
          "name": {
            "type": "string",
            "minLength": 1
          },
          "runId": {
            "type": "string"
          },
          "principalId": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "kind",
          "name"
        ],
        "additionalProperties": false
      },
      "Version": {
        "$id": "#/components/schemas/Version",
        "type": "object",
        "properties": {
          "n": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "author": {
            "$ref": "#/components/schemas/Author"
          },
          "note": {
            "type": "string"
          },
          "createdAt": {
            "type": "string"
          },
          "mutations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Mutation"
            }
          }
        },
        "required": [
          "n",
          "revision",
          "author",
          "note",
          "createdAt",
          "mutations"
        ],
        "additionalProperties": false
      },
      "Lease": {
        "$id": "#/components/schemas/Lease",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "holder": {
            "$ref": "#/components/schemas/Author"
          },
          "until": {
            "type": "string"
          }
        },
        "required": [
          "slideId",
          "holder",
          "until"
        ],
        "additionalProperties": false
      },
      "Finding": {
        "$id": "#/components/schemas/Finding",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "rule": {
            "type": "string",
            "enum": [
              "sheet/overflow",
              "sheet/rail-touch",
              "sheet/thumb-legible",
              "type/floor-15",
              "type/svg-label-min",
              "type/weight-cap",
              "type/face",
              "type/sizes-ladder",
              "type/ladder",
              "text/overflow",
              "color/tokens-only",
              "color/semantic-icons-only",
              "color/off-palette",
              "icon/placement",
              "icon/known",
              "rows/two-lines",
              "rows/key-snap",
              "dia/label-clearance",
              "dia/stroke-grammar",
              "dia/fit-slot",
              "dia/half-pixel",
              "asset/twin-or-border",
              "asset/credit-on-plate",
              "asset/license-missing",
              "asset/stretched",
              "picture/plate-clear",
              "picture/blank-twin",
              "picture/mood-placement",
              "opener/sentence-lists-section",
              "lines/law",
              "copy/heading-period",
              "copy/sentence-case",
              "copy/token-first",
              "copy/heading-is-name",
              "copy/no-em-dash",
              "copy/no-exclamation",
              "copy/no-eyebrow",
              "copy/full-sentence-caption",
              "copy/contrast-pair",
              "copy/metaphor-candidate",
              "copy/empty-placeholder",
              "table/size",
              "chart/size",
              "contrast/both-themes",
              "layout/empty-half",
              "layout/pair-gaps",
              "layout/columns-aligned",
              "layout/freeform",
              "freeform/overlap",
              "freeform/off-sheet",
              "scales/marker-equals-value",
              "escape/html-block",
              "html/sanitize",
              "export/non-native",
              "numbers/contradiction",
              "count/hard-coded"
            ]
          },
          "severity": {
            "type": "number",
            "enum": [
              1,
              2,
              3
            ]
          },
          "kind": {
            "type": "string",
            "enum": [
              "defect",
              "diagram",
              "polish",
              "copy",
              "accuracy"
            ]
          },
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "path": {
            "type": "string"
          },
          "theme": {
            "type": "string",
            "enum": [
              "light",
              "dark"
            ]
          },
          "evidence": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string"
              },
              "box": {
                "type": "array",
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ],
                "items": false,
                "minItems": 4,
                "maxItems": 4
              },
              "measured": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "number"
                }
              },
              "image": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "proposal": {
            "type": "string"
          },
          "fix": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Mutation"
            }
          },
          "source": {
            "anyOf": [
              {
                "type": "string",
                "const": "lint"
              },
              {
                "type": "string",
                "const": "skeptic"
              },
              {
                "type": "string",
                "pattern": "^judge:[\\s\\S]{0,}$"
              }
            ]
          }
        },
        "required": [
          "id",
          "rule",
          "severity",
          "kind",
          "slideId",
          "evidence",
          "proposal",
          "source"
        ],
        "additionalProperties": false
      },
      "RenderRecord": {
        "$id": "#/components/schemas/RenderRecord",
        "type": "object",
        "properties": {
          "deckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "theme": {
            "type": "string",
            "enum": [
              "light",
              "dark"
            ]
          },
          "scale": {
            "type": "number",
            "enum": [
              1,
              2
            ]
          },
          "image": {
            "type": "string"
          },
          "renderer": {
            "type": "string"
          },
          "pageErrors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "consoleErrors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "overflow": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "blockId": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                },
                "selector": {
                  "type": "string"
                },
                "box": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    }
                  ],
                  "items": false,
                  "minItems": 4,
                  "maxItems": 4
                }
              },
              "required": [
                "selector",
                "box"
              ],
              "additionalProperties": false
            }
          },
          "blocks": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "box": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    }
                  ],
                  "items": false,
                  "minItems": 4,
                  "maxItems": 4
                },
                "lines": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "fontSize": {
                  "type": "number"
                },
                "fontWeight": {
                  "type": "number"
                },
                "color": {
                  "type": "string"
                },
                "contentHeight": {
                  "type": "number",
                  "minimum": 0
                }
              },
              "required": [
                "type",
                "box"
              ],
              "additionalProperties": false
            }
          },
          "fonts": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "loaded",
                  "partial"
                ]
              },
              "faces": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "status",
              "faces"
            ],
            "additionalProperties": false
          },
          "anchors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "assetId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "recipeKey": {
                  "type": "string"
                },
                "timeMs": {
                  "type": "number"
                }
              },
              "required": [
                "assetId",
                "recipeKey",
                "timeMs"
              ],
              "additionalProperties": false
            }
          },
          "rasters": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "blockId": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "dia",
                    "dither",
                    "icon",
                    "mark",
                    "shot",
                    "html",
                    "material"
                  ]
                },
                "file": {
                  "type": "string"
                },
                "box": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "number"
                    }
                  ],
                  "items": false,
                  "minItems": 4,
                  "maxItems": 4
                },
                "alpha": {
                  "type": "boolean"
                }
              },
              "required": [
                "blockId",
                "kind",
                "file",
                "box",
                "alpha"
              ],
              "additionalProperties": false
            }
          },
          "timing": {
            "type": "object",
            "properties": {
              "readyMs": {
                "type": "number",
                "minimum": 0
              },
              "screenshotMs": {
                "type": "number",
                "minimum": 0
              }
            },
            "required": [
              "readyMs",
              "screenshotMs"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "deckId",
          "slideId",
          "revision",
          "theme",
          "scale",
          "image",
          "renderer",
          "pageErrors",
          "consoleErrors",
          "overflow",
          "blocks",
          "fonts",
          "anchors",
          "rasters",
          "timing"
        ],
        "additionalProperties": false
      },
      "ExportReport": {
        "$id": "#/components/schemas/ExportReport",
        "type": "object",
        "properties": {
          "deckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "format": {
            "type": "string",
            "enum": [
              "pptx",
              "pdf"
            ]
          },
          "mode": {
            "type": "string",
            "enum": [
              "native",
              "flatten"
            ]
          },
          "theme": {
            "type": "string",
            "enum": [
              "light",
              "dark"
            ]
          },
          "fontSet": {
            "type": "string",
            "enum": [
              "exact",
              "standard"
            ]
          },
          "fontSetVersion": {
            "type": "string"
          },
          "files": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "path": {
                  "type": "string"
                },
                "bytes": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "sha256": {
                  "type": "string"
                }
              },
              "required": [
                "path",
                "bytes",
                "sha256"
              ],
              "additionalProperties": false
            }
          },
          "fonts": {
            "type": "object",
            "properties": {
              "embedded": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "requiredOnViewer": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "substitutedIn": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "embedded",
              "requiredOnViewer",
              "substitutedIn"
            ],
            "additionalProperties": false
          },
          "slides": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slideId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "theme": {
                  "type": "string",
                  "enum": [
                    "light",
                    "dark"
                  ]
                },
                "native": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "pattern": "^[a-z0-9][a-z0-9-]*$"
                  }
                },
                "raster": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "pattern": "^[a-z0-9][a-z0-9-]*$"
                  }
                },
                "sheet": {
                  "type": "string"
                },
                "page": {
                  "type": "object",
                  "properties": {
                    "format": {
                      "type": "string",
                      "enum": [
                        "png-1bit",
                        "png-palette",
                        "png-rgba",
                        "jpeg"
                      ]
                    },
                    "bytes": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "colors": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "mismatch": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "fraction": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    }
                  },
                  "required": [
                    "format",
                    "bytes",
                    "colors",
                    "mismatch",
                    "fraction"
                  ],
                  "additionalProperties": false
                },
                "pictures": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "box": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          }
                        ],
                        "items": false,
                        "minItems": 4,
                        "maxItems": 4
                      },
                      "regenerated": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "box",
                      "regenerated"
                    ],
                    "additionalProperties": false
                  }
                },
                "verify": {
                  "type": "object",
                  "properties": {
                    "mismatch": {
                      "type": "number",
                      "minimum": 0
                    },
                    "fraction": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    "scale": {
                      "type": "number",
                      "exclusiveMinimum": 0
                    },
                    "pictureMismatch": {
                      "type": "number",
                      "minimum": 0
                    },
                    "pictureFraction": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    "blocks": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "blockId": {
                            "type": "string",
                            "pattern": "^[a-z0-9][a-z0-9-]*$"
                          },
                          "dx": {
                            "type": "number"
                          },
                          "dy": {
                            "type": "number"
                          },
                          "dw": {
                            "type": "number"
                          },
                          "ok": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "blockId",
                          "dx",
                          "dy",
                          "dw",
                          "ok"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "ref": {
                      "type": "string"
                    },
                    "got": {
                      "type": "string"
                    },
                    "diff": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "mismatch",
                    "fraction",
                    "blocks",
                    "ref",
                    "got",
                    "diff"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "slideId",
                "native",
                "raster"
              ],
              "additionalProperties": false
            }
          },
          "geometryInBounds": {
            "type": "boolean"
          },
          "perfect": {
            "type": "boolean"
          },
          "passed": {
            "type": "boolean"
          },
          "residual": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "deckId",
          "revision",
          "format",
          "mode",
          "theme",
          "fontSet",
          "fontSetVersion",
          "files",
          "fonts",
          "slides",
          "geometryInBounds",
          "perfect",
          "passed",
          "residual"
        ],
        "additionalProperties": false
      },
      "DeckInfoInput": {
        "$id": "#/components/schemas/DeckInfoInput",
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "DeckInfoOutput": {
        "$id": "#/components/schemas/DeckInfoOutput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "title": {
            "type": "string"
          },
          "theme": {
            "type": "string"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "sections": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "name": {
                  "type": "string"
                },
                "slides": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "n": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "title": {
                        "type": "string"
                      },
                      "kind": {
                        "type": "string",
                        "enum": [
                          "content",
                          "opener",
                          "mood",
                          "closing",
                          "title",
                          "statement"
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "n",
                      "title",
                      "kind"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "name",
                "slides"
              ],
              "additionalProperties": false
            }
          },
          "brand": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "appearance": {
                "type": "string",
                "enum": [
                  "light",
                  "dark"
                ]
              },
              "colors": {
                "type": "object",
                "properties": {
                  "light": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "background": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "caption": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "hint": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "primary": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "accent": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  },
                  "dark": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "background": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "caption": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "hint": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "primary": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "accent": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              "fonts": {
                "type": "object",
                "properties": {
                  "display": {
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  },
                  "text": {
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "mark": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "default",
                      "none",
                      "picture"
                    ]
                  },
                  "assetId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "box": {
                    "type": "object",
                    "properties": {
                      "w": {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 1600
                      },
                      "h": {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 900
                      }
                    },
                    "required": [
                      "w",
                      "h"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind"
                ],
                "additionalProperties": false
              },
              "footer": {
                "type": "object",
                "properties": {
                  "logo": {
                    "type": "string",
                    "enum": [
                      "default",
                      "none",
                      "picture"
                    ]
                  },
                  "assetId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "text": {
                    "type": "string",
                    "maxLength": 200
                  }
                },
                "additionalProperties": false
              },
              "counter": {
                "type": "object",
                "properties": {
                  "show": {
                    "type": "boolean"
                  },
                  "format": {
                    "type": "string",
                    "enum": [
                      "n / N",
                      "n",
                      "Slide n"
                    ]
                  },
                  "skipTitle": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "frame": {
                "type": "object",
                "properties": {
                  "rails": {
                    "type": "boolean"
                  },
                  "rules": {
                    "type": "boolean"
                  },
                  "crosses": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "positions": {
                "type": "object",
                "properties": {
                  "mark": {
                    "type": "string",
                    "enum": [
                      "top-left",
                      "top-right",
                      "bottom-left",
                      "bottom-right",
                      "hidden"
                    ]
                  },
                  "footerLogo": {
                    "type": "string",
                    "enum": [
                      "top-left",
                      "top-right",
                      "bottom-left",
                      "bottom-right",
                      "hidden"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "lexicon": {
                "maxItems": 200,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                }
              }
            },
            "additionalProperties": false
          },
          "counts": {
            "type": "object",
            "properties": {
              "slides": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "sections": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "assets": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "htmlBlocks": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "skipped": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "canvas": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "charts": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "guides": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "snapshots": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "records": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "holes": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "slides",
              "sections",
              "assets",
              "htmlBlocks"
            ],
            "additionalProperties": false
          },
          "defaults": {
            "type": "object",
            "properties": {
              "notes": {
                "type": "string"
              },
              "appearance": {
                "type": "string",
                "enum": [
                  "light",
                  "dark"
                ]
              },
              "counter": {
                "type": "string",
                "enum": [
                  "on",
                  "off",
                  "skip-title"
                ]
              },
              "background": {
                "type": "object",
                "properties": {
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  }
                },
                "required": [
                  "color"
                ],
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          "guides": {
            "type": "object",
            "properties": {
              "x": {
                "type": "array",
                "items": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1600
                }
              },
              "y": {
                "type": "array",
                "items": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 900
                }
              }
            },
            "required": [
              "x",
              "y"
            ],
            "additionalProperties": false
          },
          "trashedAt": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "theme",
          "revision",
          "sections",
          "counts"
        ],
        "additionalProperties": false
      },
      "DeckCreateInput": {
        "$id": "#/components/schemas/DeckCreateInput",
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "The deck title; the id is its slug unless `id` is given"
          },
          "from": {
            "description": "A template id of the index (template.list): 'blank' writes one title slide in the Simple theme; 'gt-brand' copies the General Translation brand deck (95 slides, 8 sections, the assets); a saved template copies its folder. The deployment default (template.list `default`) when absent",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "id": {
            "description": "The deck id under decks/; derived from the name when absent",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "DeckCreateOutput": {
        "$id": "#/components/schemas/DeckCreateOutput",
        "type": "object",
        "properties": {
          "deckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "title": {
            "type": "string"
          },
          "from": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "dir": {
            "type": "string",
            "description": "The deck directory"
          },
          "counts": {
            "type": "object",
            "properties": {
              "slides": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "sections": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "assets": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "slides",
              "sections",
              "assets"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "deckId",
          "title",
          "from",
          "revision",
          "dir",
          "counts"
        ],
        "additionalProperties": false
      },
      "DeckRenameInput": {
        "$id": "#/components/schemas/DeckRenameInput",
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "The new title"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "name",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DeckRenameOutput": {
        "$id": "#/components/schemas/DeckRenameOutput",
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "title",
          "revision"
        ],
        "additionalProperties": false
      },
      "DeckSetInput": {
        "$id": "#/components/schemas/DeckSetInput",
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "pattern": "^\\/(title|theme|defaults(\\/[a-zA-Z]+)?)$",
            "description": "JSON pointer into the manifest: /title, /theme, /defaults/appearance, /defaults/counter or /defaults/notes"
          },
          "value": {
            "description": "The new value; omit it to remove the field"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "path",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DeckSetOutput": {
        "$id": "#/components/schemas/DeckSetOutput",
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "value": {
            "description": "The value now at the path; absent when removed"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "path",
          "revision"
        ],
        "additionalProperties": false
      },
      "DeckPackInput": {
        "$id": "#/components/schemas/DeckPackInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The deck id under decks/"
          },
          "out": {
            "description": "The zip to write; defaults to <id>-r<revision>.zip",
            "type": "string"
          },
          "versions": {
            "description": "Carry versions/<n>.json; on by default (--no-versions turns it off)",
            "type": "boolean"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "DeckPackOutput": {
        "$id": "#/components/schemas/DeckPackOutput",
        "type": "object",
        "properties": {
          "deckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "title": {
            "type": "string"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "out": {
            "type": "string",
            "description": "The zip written"
          },
          "bytes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "sha256": {
            "type": "string"
          },
          "counts": {
            "type": "object",
            "properties": {
              "documents": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "assets": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "versions": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "documents",
              "assets",
              "versions"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "deckId",
          "title",
          "revision",
          "out",
          "bytes",
          "sha256",
          "counts"
        ],
        "additionalProperties": false
      },
      "DeckUnpackInput": {
        "$id": "#/components/schemas/DeckUnpackInput",
        "type": "object",
        "properties": {
          "file": {
            "type": "string",
            "description": "The bundle zip to read"
          },
          "as": {
            "description": "The deck id to write under; the bundle id when absent",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "replace": {
            "description": "Remove the deck that holds the id first; without it a taken id gets a free sibling",
            "type": "boolean"
          }
        },
        "required": [
          "file"
        ],
        "additionalProperties": false
      },
      "DeckUnpackOutput": {
        "$id": "#/components/schemas/DeckUnpackOutput",
        "type": "object",
        "properties": {
          "deckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The id the deck was written under"
          },
          "sourceDeckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The id the bundle carried"
          },
          "title": {
            "type": "string"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "dir": {
            "type": "string",
            "description": "The deck directory"
          },
          "replaced": {
            "type": "boolean"
          },
          "renamed": {
            "type": "boolean"
          },
          "counts": {
            "type": "object",
            "properties": {
              "slides": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "assets": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "versions": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "documents": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "slides",
              "assets",
              "versions",
              "documents"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "deckId",
          "sourceDeckId",
          "title",
          "revision",
          "dir",
          "replaced",
          "renamed",
          "counts"
        ],
        "additionalProperties": false
      },
      "DeckPushInput": {
        "$id": "#/components/schemas/DeckPushInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The deck id under decks/"
          },
          "to": {
            "type": "string",
            "format": "uri",
            "description": "The studio, such as https://turboslide.vercel.app"
          },
          "token": {
            "description": "The bearer token (TURBOSLIDE_TOKEN of the deployment); kept in ~/.config/turboslide/hosts.json after the first use",
            "type": "string"
          },
          "as": {
            "description": "The id the deck takes on the studio; the local id when absent",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "replace": {
            "description": "Replace the deck of that id on the studio",
            "type": "boolean"
          },
          "fromUrl": {
            "description": "A bundle already stored at a URL the studio may read (the deck store Blob host); the studio fetches it instead of receiving the bytes, for bundles over a function 4.5 MB body cap",
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "id",
          "to"
        ],
        "additionalProperties": false
      },
      "DeckPushOutput": {
        "$id": "#/components/schemas/DeckPushOutput",
        "type": "object",
        "properties": {
          "deckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The id the deck was written under"
          },
          "sourceDeckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The id the bundle carried"
          },
          "title": {
            "type": "string"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "dir": {
            "type": "string",
            "description": "The deck directory"
          },
          "replaced": {
            "type": "boolean"
          },
          "renamed": {
            "type": "boolean"
          },
          "counts": {
            "type": "object",
            "properties": {
              "slides": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "assets": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "versions": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "documents": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "slides",
              "assets",
              "versions",
              "documents"
            ],
            "additionalProperties": false
          },
          "url": {
            "type": "string",
            "description": "The editor URL of the deck on the studio"
          }
        },
        "required": [
          "deckId",
          "sourceDeckId",
          "title",
          "revision",
          "dir",
          "replaced",
          "renamed",
          "counts",
          "url"
        ],
        "additionalProperties": false
      },
      "DeckPullInput": {
        "$id": "#/components/schemas/DeckPullInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The deck id on the studio"
          },
          "from": {
            "type": "string",
            "format": "uri",
            "description": "The studio, such as https://turboslide.vercel.app"
          },
          "token": {
            "description": "The bearer token (TURBOSLIDE_TOKEN of the deployment); kept in ~/.config/turboslide/hosts.json after the first use",
            "type": "string"
          },
          "as": {
            "description": "The id the deck takes under decks/; the id on the studio when absent",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "replace": {
            "description": "Replace the local deck of that id",
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "from"
        ],
        "additionalProperties": false
      },
      "DeckListInput": {
        "$id": "#/components/schemas/DeckListInput",
        "type": "object",
        "properties": {
          "includeTrashed": {
            "description": "Also list the decks in the trash, each with its trashedAt",
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "DeckListOutput": {
        "$id": "#/components/schemas/DeckListOutput",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "title": {
              "type": "string"
            },
            "slides": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "sections": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "revision": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "updatedAt": {
              "type": "string"
            },
            "createdAt": {
              "type": "string"
            },
            "trashedAt": {
              "type": "string"
            },
            "owner": {
              "type": [
                "string",
                "null"
              ]
            },
            "role": {
              "type": "string",
              "enum": [
                "viewer",
                "commenter",
                "editor",
                "owner"
              ]
            }
          },
          "required": [
            "id",
            "title",
            "slides",
            "sections",
            "revision",
            "updatedAt",
            "createdAt"
          ],
          "additionalProperties": false
        }
      },
      "DeckCopyInput": {
        "$id": "#/components/schemas/DeckCopyInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The deck to copy"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "The title of the copy; its id is the slug unless `newId` is given"
          },
          "newId": {
            "description": "The id of the copy under decks/",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "slideIds": {
            "description": "Copy these slides only, in deck order; every slide when absent",
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "removeNotes": {
            "description": "Leave the speaker notes out of the copy",
            "type": "boolean"
          },
          "copyComments": {
            "description": "Carry the comment threads into the copy with their ids; off by default",
            "type": "boolean"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision of the source deck the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "name",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DeckCopyOutput": {
        "$id": "#/components/schemas/DeckCopyOutput",
        "type": "object",
        "properties": {
          "deckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The id of the copy"
          },
          "sourceDeckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "title": {
            "type": "string"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "dir": {
            "type": "string",
            "description": "The deck directory"
          },
          "counts": {
            "type": "object",
            "properties": {
              "slides": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "sections": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "assets": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "slides",
              "sections",
              "assets"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "deckId",
          "sourceDeckId",
          "title",
          "revision",
          "dir",
          "counts"
        ],
        "additionalProperties": false
      },
      "DeckTrashInput": {
        "$id": "#/components/schemas/DeckTrashInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The deck to move to the trash"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DeckTrashOutput": {
        "$id": "#/components/schemas/DeckTrashOutput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "trashedAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "id",
          "trashedAt",
          "revision"
        ],
        "additionalProperties": false
      },
      "DeckRestoreInput": {
        "$id": "#/components/schemas/DeckRestoreInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The deck to restore"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DeckRemoveInput": {
        "$id": "#/components/schemas/DeckRemoveInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The deck to delete"
          },
          "confirm": {
            "type": "boolean",
            "const": true,
            "description": "The caller has confirmed the deletion"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "confirm",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DeckRemoveOutput": {
        "$id": "#/components/schemas/DeckRemoveOutput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "removed": {
            "type": "boolean",
            "const": true
          }
        },
        "required": [
          "id",
          "removed"
        ],
        "additionalProperties": false
      },
      "DeckSetBackgroundInput": {
        "$id": "#/components/schemas/DeckSetBackgroundInput",
        "type": "object",
        "properties": {
          "background": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  }
                },
                "required": [
                  "color"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "description": "The colour, a palette token or a hex; null removes the default"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "background",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DeckSetBackgroundOutput": {
        "$id": "#/components/schemas/DeckSetBackgroundOutput",
        "type": "object",
        "properties": {
          "background": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  }
                },
                "required": [
                  "color"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "background",
          "revision"
        ],
        "additionalProperties": false
      },
      "DeckGuidesInput": {
        "$id": "#/components/schemas/DeckGuidesInput",
        "type": "object",
        "properties": {
          "add": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "axis": {
                  "type": "string",
                  "enum": [
                    "x",
                    "y"
                  ],
                  "description": "x for a vertical guide, y for a horizontal one"
                },
                "at": {
                  "type": "number"
                }
              },
              "required": [
                "axis",
                "at"
              ],
              "additionalProperties": false
            }
          },
          "remove": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "axis": {
                  "type": "string",
                  "enum": [
                    "x",
                    "y"
                  ],
                  "description": "x for a vertical guide, y for a horizontal one"
                },
                "at": {
                  "type": "number"
                }
              },
              "required": [
                "axis",
                "at"
              ],
              "additionalProperties": false
            }
          },
          "move": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "axis": {
                  "type": "string",
                  "enum": [
                    "x",
                    "y"
                  ],
                  "description": "x for a vertical guide, y for a horizontal one"
                },
                "from": {
                  "type": "number"
                },
                "to": {
                  "type": "number"
                }
              },
              "required": [
                "axis",
                "from",
                "to"
              ],
              "additionalProperties": false
            }
          },
          "set": {
            "description": "Replace both lists",
            "type": "object",
            "properties": {
              "x": {
                "type": "array",
                "items": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1600
                }
              },
              "y": {
                "type": "array",
                "items": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 900
                }
              }
            },
            "required": [
              "x",
              "y"
            ],
            "additionalProperties": false
          },
          "clear": {
            "description": "Remove every guide",
            "type": "boolean",
            "const": true
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DeckGuidesOutput": {
        "$id": "#/components/schemas/DeckGuidesOutput",
        "type": "object",
        "properties": {
          "guides": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "x": {
                    "type": "array",
                    "items": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1600
                    }
                  },
                  "y": {
                    "type": "array",
                    "items": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 900
                    }
                  }
                },
                "required": [
                  "x",
                  "y"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "guides",
          "revision"
        ],
        "additionalProperties": false
      },
      "TemplateListOutput": {
        "$id": "#/components/schemas/TemplateListOutput",
        "type": "object",
        "properties": {
          "templates": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                },
                "category": {
                  "type": "string",
                  "enum": [
                    "personal",
                    "work",
                    "education"
                  ]
                },
                "description": {
                  "type": "string",
                  "maxLength": 400
                },
                "cover": {
                  "type": "string",
                  "minLength": 1
                },
                "useCases": {
                  "maxItems": 8,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  }
                },
                "slides": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "theme": {
                  "type": "string",
                  "enum": [
                    "simple",
                    "general-translation",
                    "swiss",
                    "mint",
                    "coral",
                    "night",
                    "slate",
                    "sand",
                    "signal",
                    "gt-ink-paper"
                  ]
                },
                "appearance": {
                  "type": "string",
                  "enum": [
                    "light",
                    "dark"
                  ]
                },
                "organisation": {
                  "type": "boolean",
                  "const": true
                },
                "brand": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 120
                    },
                    "appearance": {
                      "type": "string",
                      "enum": [
                        "light",
                        "dark"
                      ]
                    },
                    "colors": {
                      "type": "object",
                      "properties": {
                        "light": {
                          "type": "object",
                          "properties": {
                            "text": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            },
                            "background": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            },
                            "caption": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            },
                            "hint": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            },
                            "primary": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            },
                            "accent": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            }
                          },
                          "additionalProperties": false
                        },
                        "dark": {
                          "type": "object",
                          "properties": {
                            "text": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            },
                            "background": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            },
                            "caption": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            },
                            "hint": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            },
                            "primary": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            },
                            "accent": {
                              "type": "string",
                              "pattern": "^#[0-9a-fA-F]{6}$"
                            }
                          },
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": false
                    },
                    "fonts": {
                      "type": "object",
                      "properties": {
                        "display": {
                          "type": "string",
                          "enum": [
                            "inter",
                            "roboto",
                            "open-sans",
                            "lato",
                            "montserrat",
                            "poppins",
                            "source-sans-3",
                            "source-serif-4",
                            "merriweather",
                            "playfair-display",
                            "lora",
                            "pt-serif",
                            "libre-baskerville",
                            "eb-garamond",
                            "nunito",
                            "raleway",
                            "work-sans",
                            "dm-sans",
                            "space-grotesk",
                            "oswald",
                            "bebas-neue",
                            "roboto-mono",
                            "jetbrains-mono",
                            "ibm-plex-sans",
                            "ibm-plex-mono",
                            "fira-code",
                            "geist",
                            "geist-mono",
                            "instrument-sans",
                            "manrope",
                            "bricolage-grotesque",
                            "schibsted-grotesk",
                            "newsreader",
                            "fraunces"
                          ]
                        },
                        "text": {
                          "type": "string",
                          "enum": [
                            "inter",
                            "roboto",
                            "open-sans",
                            "lato",
                            "montserrat",
                            "poppins",
                            "source-sans-3",
                            "source-serif-4",
                            "merriweather",
                            "playfair-display",
                            "lora",
                            "pt-serif",
                            "libre-baskerville",
                            "eb-garamond",
                            "nunito",
                            "raleway",
                            "work-sans",
                            "dm-sans",
                            "space-grotesk",
                            "oswald",
                            "bebas-neue",
                            "roboto-mono",
                            "jetbrains-mono",
                            "ibm-plex-sans",
                            "ibm-plex-mono",
                            "fira-code",
                            "geist",
                            "geist-mono",
                            "instrument-sans",
                            "manrope",
                            "bricolage-grotesque",
                            "schibsted-grotesk",
                            "newsreader",
                            "fraunces"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "mark": {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "enum": [
                            "default",
                            "none",
                            "picture"
                          ]
                        },
                        "assetId": {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        },
                        "box": {
                          "type": "object",
                          "properties": {
                            "w": {
                              "type": "number",
                              "exclusiveMinimum": 0,
                              "maximum": 1600
                            },
                            "h": {
                              "type": "number",
                              "exclusiveMinimum": 0,
                              "maximum": 900
                            }
                          },
                          "required": [
                            "w",
                            "h"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "kind"
                      ],
                      "additionalProperties": false
                    },
                    "footer": {
                      "type": "object",
                      "properties": {
                        "logo": {
                          "type": "string",
                          "enum": [
                            "default",
                            "none",
                            "picture"
                          ]
                        },
                        "assetId": {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        },
                        "text": {
                          "type": "string",
                          "maxLength": 200
                        }
                      },
                      "additionalProperties": false
                    },
                    "counter": {
                      "type": "object",
                      "properties": {
                        "show": {
                          "type": "boolean"
                        },
                        "format": {
                          "type": "string",
                          "enum": [
                            "n / N",
                            "n",
                            "Slide n"
                          ]
                        },
                        "skipTitle": {
                          "type": "boolean"
                        }
                      },
                      "additionalProperties": false
                    },
                    "frame": {
                      "type": "object",
                      "properties": {
                        "rails": {
                          "type": "boolean"
                        },
                        "rules": {
                          "type": "boolean"
                        },
                        "crosses": {
                          "type": "boolean"
                        }
                      },
                      "additionalProperties": false
                    },
                    "positions": {
                      "type": "object",
                      "properties": {
                        "mark": {
                          "type": "string",
                          "enum": [
                            "top-left",
                            "top-right",
                            "bottom-left",
                            "bottom-right",
                            "hidden"
                          ]
                        },
                        "footerLogo": {
                          "type": "string",
                          "enum": [
                            "top-left",
                            "top-right",
                            "bottom-left",
                            "bottom-right",
                            "hidden"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "lexicon": {
                      "maxItems": 200,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 120
                      }
                    }
                  },
                  "additionalProperties": false
                }
              },
              "required": [
                "id",
                "name",
                "category",
                "slides",
                "theme"
              ],
              "additionalProperties": false
            }
          },
          "default": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "templates",
          "default"
        ],
        "additionalProperties": false
      },
      "TemplateSlidesInput": {
        "$id": "#/components/schemas/TemplateSlidesInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The template id"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "TemplateSlidesOutput": {
        "$id": "#/components/schemas/TemplateSlidesOutput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "name": {
            "type": "string"
          },
          "slides": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "index": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "slideId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "title": {
                  "type": "string"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "content",
                    "opener",
                    "mood",
                    "closing",
                    "title",
                    "statement"
                  ]
                }
              },
              "required": [
                "index",
                "slideId",
                "title",
                "kind"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "id",
          "name",
          "slides"
        ],
        "additionalProperties": false
      },
      "TemplateCreateInput": {
        "$id": "#/components/schemas/TemplateCreateInput",
        "type": "object",
        "properties": {
          "deckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The deck to save"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "The template name; its slug is the template id"
          },
          "sentence": {
            "description": "One sentence the gallery card shows; \"Saved from <deck title>\" when absent",
            "type": "string",
            "maxLength": 400
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision of the deck the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "deckId",
          "name",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TemplateCreateOutput": {
        "$id": "#/components/schemas/TemplateCreateOutput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "name": {
            "type": "string"
          },
          "slides": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "replaced": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "slides"
        ],
        "additionalProperties": false
      },
      "TemplateUpdateInput": {
        "$id": "#/components/schemas/TemplateUpdateInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The template to replace"
          },
          "deckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The deck whose slides replace it"
          },
          "sentence": {
            "description": "A new sentence; the old one when absent",
            "type": "string",
            "maxLength": 400
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision of the deck the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "deckId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TemplateRenameInput": {
        "$id": "#/components/schemas/TemplateRenameInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The template to rename"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "The new name"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "additionalProperties": false
      },
      "TemplateDeleteInput": {
        "$id": "#/components/schemas/TemplateDeleteInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The template to delete"
          },
          "confirm": {
            "type": "boolean",
            "const": true,
            "description": "The caller has confirmed the deletion"
          }
        },
        "required": [
          "id",
          "confirm"
        ],
        "additionalProperties": false
      },
      "TemplateDeleteOutput": {
        "$id": "#/components/schemas/TemplateDeleteOutput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "removed": {
            "type": "boolean",
            "const": true
          }
        },
        "required": [
          "id",
          "removed"
        ],
        "additionalProperties": false
      },
      "TemplateSetDefaultInput": {
        "$id": "#/components/schemas/TemplateSetDefaultInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The template new presentations start from"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "TemplateSetDefaultOutput": {
        "$id": "#/components/schemas/TemplateSetDefaultOutput",
        "type": "object",
        "properties": {
          "default": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "default",
          "name"
        ],
        "additionalProperties": false
      },
      "SlideListInput": {
        "$id": "#/components/schemas/SlideListInput",
        "type": "object",
        "properties": {
          "sectionId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "additionalProperties": false
      },
      "SlideListOutput": {
        "$id": "#/components/schemas/SlideListOutput",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "n": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            },
            "section": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "title": {
              "type": "string"
            },
            "kind": {
              "type": "string",
              "enum": [
                "content",
                "opener",
                "mood",
                "closing",
                "title",
                "statement"
              ]
            },
            "lint": {
              "type": "object",
              "properties": {
                "s3": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "s2": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "s3",
                "s2"
              ],
              "additionalProperties": false
            },
            "skip": {
              "type": "boolean"
            },
            "template": {
              "type": "string",
              "enum": [
                "title",
                "opener",
                "split",
                "cols",
                "title-only",
                "one-column",
                "statement",
                "section-description",
                "mood",
                "big-number",
                "blank",
                "subtitle-body",
                "rows",
                "plain",
                "table",
                "figure",
                "pair",
                "tiles",
                "details",
                "board",
                "matrix",
                "closing"
              ],
              "description": "One of the layout list"
            },
            "canvas": {
              "type": "boolean"
            },
            "objects": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "id",
            "n",
            "section",
            "title",
            "kind",
            "lint"
          ],
          "additionalProperties": false
        }
      },
      "SlideGetInput": {
        "$id": "#/components/schemas/SlideGetInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "slideId"
        ],
        "additionalProperties": false
      },
      "SlideGetOutput": {
        "$id": "#/components/schemas/SlideGetOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "n": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "section": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "assets": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "additionalProperties": {
              "$ref": "#/components/schemas/Asset"
            }
          },
          "render": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RenderRecord"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "slide",
          "n",
          "section",
          "assets",
          "render"
        ],
        "additionalProperties": false
      },
      "SlideInsertInput": {
        "$id": "#/components/schemas/SlideInsertInput",
        "type": "object",
        "properties": {
          "sectionId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "after": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "sectionId",
          "slide",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideInsertOutput": {
        "$id": "#/components/schemas/SlideInsertOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "outline": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "name": {
                  "type": "string"
                },
                "slides": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "n": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "title": {
                        "type": "string"
                      },
                      "kind": {
                        "type": "string",
                        "enum": [
                          "content",
                          "opener",
                          "mood",
                          "closing",
                          "title",
                          "statement"
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "n",
                      "title",
                      "kind"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "name",
                "slides"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "slide",
          "revision",
          "outline"
        ],
        "additionalProperties": false
      },
      "SlideRemoveInput": {
        "$id": "#/components/schemas/SlideRemoveInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideRemoveOutput": {
        "$id": "#/components/schemas/SlideRemoveOutput",
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "outline": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "name": {
                  "type": "string"
                },
                "slides": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "n": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "title": {
                        "type": "string"
                      },
                      "kind": {
                        "type": "string",
                        "enum": [
                          "content",
                          "opener",
                          "mood",
                          "closing",
                          "title",
                          "statement"
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "n",
                      "title",
                      "kind"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "name",
                "slides"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "revision",
          "outline"
        ],
        "additionalProperties": false
      },
      "SlideMoveInput": {
        "$id": "#/components/schemas/SlideMoveInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "sectionId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "after": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "sectionId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideMoveOutput": {
        "$id": "#/components/schemas/SlideMoveOutput",
        "type": "object",
        "properties": {
          "sections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Section"
            }
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "sections",
          "revision"
        ],
        "additionalProperties": false
      },
      "SlideUpdateInput": {
        "$id": "#/components/schemas/SlideUpdateInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          },
          "mutations": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Mutation"
            }
          }
        },
        "required": [
          "slideId",
          "baseRevision",
          "mutations"
        ],
        "additionalProperties": false
      },
      "SlideUpdateOutput": {
        "$id": "#/components/schemas/SlideUpdateOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          }
        },
        "required": [
          "slide",
          "revision",
          "findings"
        ],
        "additionalProperties": false
      },
      "SlideReplaceInput": {
        "$id": "#/components/schemas/SlideReplaceInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          },
          "slide": {
            "$ref": "#/components/schemas/Slide"
          }
        },
        "required": [
          "slideId",
          "baseRevision",
          "slide"
        ],
        "additionalProperties": false
      },
      "SlideSetLayoutInput": {
        "$id": "#/components/schemas/SlideSetLayoutInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "layout": {
            "description": "The target layout with its options",
            "$ref": "#/components/schemas/Layout"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "layout",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideNewInput": {
        "$id": "#/components/schemas/SlideNewInput",
        "type": "object",
        "properties": {
          "layout": {
            "type": "string",
            "enum": [
              "title",
              "opener",
              "split",
              "cols",
              "title-only",
              "one-column",
              "statement",
              "section-description",
              "mood",
              "big-number",
              "blank",
              "subtitle-body",
              "rows",
              "plain",
              "table",
              "figure",
              "pair",
              "tiles",
              "details",
              "board",
              "matrix",
              "closing"
            ],
            "description": "One of the layout list"
          },
          "after": {
            "description": "The slide the new one follows; first in the section when absent",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "sectionId": {
            "description": "The section; the anchor's section, or the last section, when absent",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "id": {
            "description": "The slide id; <layout>-<n> with the first free n when absent. A browser tab mints <layout>-<n>-<four base36 characters of its client id>, so two tabs adding a slide within the same moment never mint one id (docs/archive/rounds/POLISH.md 2.8 item 99)",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "layout",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideNewOutput": {
        "$id": "#/components/schemas/SlideNewOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "outline": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "name": {
                  "type": "string"
                },
                "slides": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "n": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "title": {
                        "type": "string"
                      },
                      "kind": {
                        "type": "string",
                        "enum": [
                          "content",
                          "opener",
                          "mood",
                          "closing",
                          "title",
                          "statement"
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "n",
                      "title",
                      "kind"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "name",
                "slides"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "slide",
          "revision",
          "outline"
        ],
        "additionalProperties": false
      },
      "SlideDuplicateInput": {
        "$id": "#/components/schemas/SlideDuplicateInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "One or more slide ids"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideDuplicateOutput": {
        "$id": "#/components/schemas/SlideDuplicateOutput",
        "type": "object",
        "properties": {
          "slides": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Slide"
            }
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "outline": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "name": {
                  "type": "string"
                },
                "slides": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "n": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "title": {
                        "type": "string"
                      },
                      "kind": {
                        "type": "string",
                        "enum": [
                          "content",
                          "opener",
                          "mood",
                          "closing",
                          "title",
                          "statement"
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "n",
                      "title",
                      "kind"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "name",
                "slides"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "slides",
          "revision",
          "outline"
        ],
        "additionalProperties": false
      },
      "SlideSkipInput": {
        "$id": "#/components/schemas/SlideSkipInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "One or more slide ids"
          },
          "skip": {
            "type": "boolean",
            "description": "true skips the slides, false shows them again"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideIds",
          "skip",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideSkipOutput": {
        "$id": "#/components/schemas/SlideSkipOutput",
        "type": "object",
        "properties": {
          "slideIds": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "skip": {
            "type": "boolean"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "slideIds",
          "skip",
          "revision"
        ],
        "additionalProperties": false
      },
      "SlideApplyLayoutInput": {
        "$id": "#/components/schemas/SlideApplyLayoutInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "One or more slide ids"
          },
          "layout": {
            "type": "string",
            "enum": [
              "title",
              "opener",
              "split",
              "cols",
              "title-only",
              "one-column",
              "statement",
              "section-description",
              "mood",
              "big-number",
              "blank",
              "subtitle-body",
              "rows",
              "plain",
              "table",
              "figure",
              "pair",
              "tiles",
              "details",
              "board",
              "matrix",
              "closing"
            ],
            "description": "One of the layout list"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideIds",
          "layout",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideApplyLayoutOutput": {
        "$id": "#/components/schemas/SlideApplyLayoutOutput",
        "type": "object",
        "properties": {
          "slides": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Slide"
            }
          },
          "dropped": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slideId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "blockIds": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "pattern": "^[a-z0-9][a-z0-9-]*$"
                  }
                }
              },
              "required": [
                "slideId",
                "blockIds"
              ],
              "additionalProperties": false
            }
          },
          "moved": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          }
        },
        "required": [
          "slides",
          "dropped",
          "moved",
          "revision",
          "findings"
        ],
        "additionalProperties": false
      },
      "SlideImportInput": {
        "$id": "#/components/schemas/SlideImportInput",
        "type": "object",
        "properties": {
          "sourceDeckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "The deck the slides come from"
          },
          "slideIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The slides to copy, in the order they land"
          },
          "after": {
            "description": "The slide the copies follow; first in the section when absent",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "sectionId": {
            "description": "The section; the anchor's section, or the last section, when absent",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "sourceDeckId",
          "slideIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideImportOutput": {
        "$id": "#/components/schemas/SlideImportOutput",
        "type": "object",
        "properties": {
          "slides": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Slide"
            }
          },
          "assets": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The asset ids copied into this deck"
          },
          "renamed": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "from": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "to": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                }
              },
              "required": [
                "from",
                "to"
              ],
              "additionalProperties": false
            }
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "outline": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "name": {
                  "type": "string"
                },
                "slides": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "n": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "title": {
                        "type": "string"
                      },
                      "kind": {
                        "type": "string",
                        "enum": [
                          "content",
                          "opener",
                          "mood",
                          "closing",
                          "title",
                          "statement"
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "n",
                      "title",
                      "kind"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "name",
                "slides"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "slides",
          "assets",
          "renamed",
          "revision",
          "outline"
        ],
        "additionalProperties": false
      },
      "SlideToCanvasInput": {
        "$id": "#/components/schemas/SlideToCanvasInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "One or more slide ids"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideToCanvasOutput": {
        "$id": "#/components/schemas/SlideToCanvasOutput",
        "type": "object",
        "properties": {
          "slides": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slideId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "converted": {
                  "type": "boolean"
                },
                "template": {
                  "type": "string",
                  "enum": [
                    "title",
                    "opener",
                    "split",
                    "cols",
                    "title-only",
                    "one-column",
                    "statement",
                    "section-description",
                    "mood",
                    "big-number",
                    "blank",
                    "subtitle-body",
                    "rows",
                    "plain",
                    "table",
                    "figure",
                    "pair",
                    "tiles",
                    "details",
                    "board",
                    "matrix",
                    "closing"
                  ],
                  "description": "One of the layout list"
                },
                "objects": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "type": {
                        "type": "string"
                      },
                      "pos": {
                        "type": "object",
                        "properties": {
                          "x": {
                            "type": "number",
                            "title": "X",
                            "x-inspector": {
                              "label": "X",
                              "control": "number",
                              "group": "Layout"
                            }
                          },
                          "y": {
                            "type": "number",
                            "title": "Y",
                            "x-inspector": {
                              "label": "Y",
                              "control": "number",
                              "group": "Layout"
                            }
                          },
                          "w": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "title": "Width",
                            "x-inspector": {
                              "label": "Width",
                              "control": "number",
                              "group": "Layout"
                            }
                          },
                          "h": {
                            "type": "number",
                            "exclusiveMinimum": 0,
                            "title": "Height",
                            "x-inspector": {
                              "label": "Height",
                              "control": "number",
                              "group": "Layout"
                            }
                          },
                          "z": {
                            "title": "Z order",
                            "x-inspector": {
                              "label": "Z order",
                              "control": "number",
                              "group": "Layout",
                              "help": "Higher draws over lower; block.order moves a block through the stack."
                            },
                            "description": "Higher draws over lower; block.order moves a block through the stack.",
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "rotate": {
                            "title": "Rotate",
                            "x-inspector": {
                              "label": "Rotate",
                              "control": "number",
                              "snap": [
                                0,
                                15,
                                30,
                                45,
                                90,
                                180,
                                270
                              ],
                              "group": "Layout",
                              "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                            },
                            "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                            "type": "number",
                            "minimum": 0,
                            "exclusiveMaximum": 360
                          },
                          "flip": {
                            "title": "Flip",
                            "x-inspector": {
                              "label": "Flip",
                              "control": "select",
                              "snap": [
                                "h",
                                "v",
                                "hv"
                              ],
                              "group": "Layout",
                              "help": "h mirrors left to right, v top to bottom, hv both."
                            },
                            "description": "h mirrors left to right, v top to bottom, hv both.",
                            "type": "string",
                            "enum": [
                              "h",
                              "v",
                              "hv"
                            ]
                          },
                          "group": {
                            "title": "Group",
                            "x-inspector": {
                              "label": "Group",
                              "control": "readonly",
                              "group": "Layout",
                              "help": "The tag the members of one group share; Group and Ungroup write it."
                            },
                            "description": "The tag the members of one group share; Group and Ungroup write it.",
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          }
                        },
                        "required": [
                          "x",
                          "y",
                          "w",
                          "h"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "id",
                      "type",
                      "pos"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "slideId",
                "converted",
                "objects"
              ],
              "additionalProperties": false
            }
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          }
        },
        "required": [
          "slides",
          "revision",
          "findings"
        ],
        "additionalProperties": false
      },
      "SlideSetBackgroundInput": {
        "$id": "#/components/schemas/SlideSetBackgroundInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "One or more slide ids"
          },
          "background": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "color": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  }
                },
                "required": [
                  "color"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideIds",
          "background",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideSetBackgroundOutput": {
        "$id": "#/components/schemas/SlideSetBackgroundOutput",
        "type": "object",
        "properties": {
          "slides": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Slide"
            }
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          }
        },
        "required": [
          "slides",
          "revision",
          "findings"
        ],
        "additionalProperties": false
      },
      "TextReplaceAllInput": {
        "$id": "#/components/schemas/TextReplaceAllInput",
        "type": "object",
        "properties": {
          "find": {
            "type": "string",
            "minLength": 1
          },
          "replace": {
            "type": "string"
          },
          "matchCase": {
            "description": "Match the case exactly; off by default",
            "type": "boolean"
          },
          "slideIds": {
            "description": "Restrict to these slides",
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "find",
          "replace",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TextReplaceAllOutput": {
        "$id": "#/components/schemas/TextReplaceAllOutput",
        "type": "object",
        "properties": {
          "replacements": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "slideIds": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The slides that changed"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "replacements",
          "slideIds",
          "revision"
        ],
        "additionalProperties": false
      },
      "BlockSetInput": {
        "$id": "#/components/schemas/BlockSetInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "path": {
            "type": "string",
            "description": "JSON pointer inside the block, such as /key"
          },
          "value": {
            "description": "The new value; omit it to delete the property"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "path",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockInsertInput": {
        "$id": "#/components/schemas/BlockInsertInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "slot": {
            "type": "string",
            "enum": [
              "main",
              "head",
              "headLeft",
              "headRight",
              "body",
              "left",
              "right",
              "plate"
            ]
          },
          "after": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "block": {
            "$ref": "#/components/schemas/Block"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "slot",
          "block",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockRemoveInput": {
        "$id": "#/components/schemas/BlockRemoveInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockMoveInput": {
        "$id": "#/components/schemas/BlockMoveInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "slot": {
            "type": "string",
            "enum": [
              "main",
              "head",
              "headLeft",
              "headRight",
              "body",
              "left",
              "right",
              "plate"
            ]
          },
          "after": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "slot",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockAlignInput": {
        "$id": "#/components/schemas/BlockAlignInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            },
            "description": "The blocks to move, top level of a freeform slide"
          },
          "edge": {
            "type": "string",
            "enum": [
              "left",
              "center",
              "right",
              "top",
              "middle",
              "bottom"
            ],
            "description": "left, center or right move x; top, middle or bottom move y"
          },
          "to": {
            "description": "The reference box; 'selection' for several blocks and 'sheet' (the slide) for one unless set",
            "type": "string",
            "enum": [
              "selection",
              "content",
              "sheet"
            ]
          },
          "snap": {
            "description": "Snap the selection's shared edge to the guides and the grid; off unless true, and never applied to the slide's or the content box's edges",
            "type": "boolean"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "edge",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockDistributeInput": {
        "$id": "#/components/schemas/BlockDistributeInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 2,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "axis": {
            "type": "string",
            "enum": [
              "horizontal",
              "vertical"
            ]
          },
          "gap": {
            "description": "A fixed gap in px instead of equal spacing",
            "type": "number",
            "minimum": 0
          },
          "snap": {
            "type": "boolean"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "axis",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockOrderInput": {
        "$id": "#/components/schemas/BlockOrderInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "move": {
            "type": "string",
            "enum": [
              "front",
              "back",
              "forward",
              "backward"
            ]
          },
          "z": {
            "description": "The target rank in the stack, 0 at the back",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockDuplicateInput": {
        "$id": "#/components/schemas/BlockDuplicateInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockDuplicateOutput": {
        "$id": "#/components/schemas/BlockDuplicateOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "blockIds": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            },
            "description": "The ids of the copies, in input order"
          }
        },
        "required": [
          "slide",
          "revision",
          "findings",
          "blockIds"
        ],
        "additionalProperties": false
      },
      "BlockGroupInput": {
        "$id": "#/components/schemas/BlockGroupInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 2,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "group": {
            "description": "The tag; a fresh one when absent",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockGroupOutput": {
        "$id": "#/components/schemas/BlockGroupOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "group": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "slide",
          "revision",
          "findings",
          "group"
        ],
        "additionalProperties": false
      },
      "BlockUngroupInput": {
        "$id": "#/components/schemas/BlockUngroupInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "group": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockRegroupInput": {
        "$id": "#/components/schemas/BlockRegroupInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 2,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "group": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "group",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockRegroupOutput": {
        "$id": "#/components/schemas/BlockRegroupOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "group": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "slide",
          "revision",
          "findings",
          "group"
        ],
        "additionalProperties": false
      },
      "BlockRotateInput": {
        "$id": "#/components/schemas/BlockRotateInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "to": {
            "description": "The angle in degrees",
            "type": "number"
          },
          "by": {
            "description": "Degrees added to the current angle",
            "type": "number"
          },
          "about": {
            "description": "'each' unless set",
            "type": "string",
            "enum": [
              "each",
              "selection"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockFlipInput": {
        "$id": "#/components/schemas/BlockFlipInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "axis": {
            "type": "string",
            "enum": [
              "h",
              "v"
            ],
            "description": "h flips horizontally, v vertically"
          },
          "about": {
            "type": "string",
            "enum": [
              "each",
              "selection"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "axis",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockCropInput": {
        "$id": "#/components/schemas/BlockCropInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "trim": {
            "type": "object",
            "properties": {
              "left": {
                "type": "number",
                "minimum": 0,
                "exclusiveMaximum": 1
              },
              "right": {
                "type": "number",
                "minimum": 0,
                "exclusiveMaximum": 1
              },
              "top": {
                "type": "number",
                "minimum": 0,
                "exclusiveMaximum": 1
              },
              "bottom": {
                "type": "number",
                "minimum": 0,
                "exclusiveMaximum": 1
              }
            },
            "required": [
              "left",
              "right",
              "top",
              "bottom"
            ],
            "additionalProperties": false
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "trim",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockMaskInput": {
        "$id": "#/components/schemas/BlockMaskInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "mask": {
            "type": [
              "string",
              "null"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "mask",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockResetImageInput": {
        "$id": "#/components/schemas/BlockResetImageInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockAdjustInput": {
        "$id": "#/components/schemas/BlockAdjustInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "transparency": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "brightness": {
            "anyOf": [
              {
                "type": "number",
                "minimum": -1,
                "maximum": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "contrast": {
            "anyOf": [
              {
                "type": "number",
                "minimum": -1,
                "maximum": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockSetAltInput": {
        "$id": "#/components/schemas/BlockSetAltInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "alt": {
            "type": "string"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "alt",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockSetAltOutput": {
        "$id": "#/components/schemas/BlockSetAltOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "target": {
            "type": "string",
            "enum": [
              "block",
              "asset"
            ]
          },
          "assetId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "slide",
          "revision",
          "findings",
          "target"
        ],
        "additionalProperties": false
      },
      "BlockShadowInput": {
        "$id": "#/components/schemas/BlockShadowInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "shadow": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "color": {
                    "title": "Shadow color",
                    "x-inspector": {
                      "label": "Shadow color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The shadow’s colour; the ink unless set."
                    },
                    "description": "The shadow’s colour; the ink unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "opacity": {
                    "title": "Transparency",
                    "x-inspector": {
                      "label": "Transparency",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s opacity 0 to 1; 0.3 unless set."
                    },
                    "description": "The shadow’s opacity 0 to 1; 0.3 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "angle": {
                    "title": "Angle",
                    "x-inspector": {
                      "label": "Angle",
                      "control": "number",
                      "group": "Block",
                      "help": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set."
                    },
                    "description": "The direction the shadow falls in, degrees clockwise from the right; 45 unless set.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "distance": {
                    "title": "Distance",
                    "x-inspector": {
                      "label": "Distance",
                      "control": "number",
                      "group": "Block",
                      "help": "How far the shadow falls, in px; 8 unless set."
                    },
                    "description": "How far the shadow falls, in px; 8 unless set.",
                    "type": "number",
                    "minimum": 0
                  },
                  "blur": {
                    "title": "Blur radius",
                    "x-inspector": {
                      "label": "Blur radius",
                      "control": "number",
                      "group": "Block",
                      "help": "The shadow’s blur in px; 12 unless set."
                    },
                    "description": "The shadow’s blur in px; 12 unless set.",
                    "type": "number",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "shadow",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockAutofitInput": {
        "$id": "#/components/schemas/BlockAutofitInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "autofit": {
            "type": "string",
            "enum": [
              "none",
              "shrink",
              "grow"
            ]
          },
          "apply": {
            "description": "Measure the block and write the fit now: the box height for grow, the size step for shrink",
            "type": "boolean",
            "const": true
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "autofit",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BlockAutofitOutput": {
        "$id": "#/components/schemas/BlockAutofitOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "written": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "slide",
          "revision",
          "findings",
          "written"
        ],
        "additionalProperties": false
      },
      "TextStyleInput": {
        "$id": "#/components/schemas/TextStyleInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "path": {
            "type": "string",
            "description": "JSON pointer of the Text inside the block, such as /text"
          },
          "range": {
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2,
            "description": "The range in the plain text of the Text, [start, end], one character per paragraph break"
          },
          "marks": {
            "type": "object",
            "properties": {
              "i": {
                "type": "boolean"
              },
              "u": {
                "type": "boolean"
              },
              "s": {
                "type": "boolean"
              },
              "sup": {
                "type": "boolean"
              },
              "sub": {
                "type": "boolean"
              },
              "color": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "highlight": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "size": {
                "description": "The size of the range in pixels, 6 to 200; null clears it",
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 6,
                    "maximum": 200
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "path",
          "range",
          "marks",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TextStyleOutput": {
        "$id": "#/components/schemas/TextStyleOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "slide",
          "revision",
          "findings",
          "text"
        ],
        "additionalProperties": false
      },
      "TextListInput": {
        "$id": "#/components/schemas/TextListInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "marker": {
            "type": "string",
            "enum": [
              "rule",
              "bullet",
              "number"
            ]
          },
          "preset": {
            "type": "string",
            "enum": [
              "disc-circle-square",
              "diamondx-arrow3d-square",
              "checkbox",
              "arrow-diamond-disc",
              "star-circle-square",
              "arrow3d-circle-square",
              "lefttriangle-diamond-disc",
              "diamondx-hollowdiamond-square",
              "diamond-circle-square",
              "digit-alpha-roman",
              "digit-alpha-roman-parens",
              "digit-nested",
              "upperalpha-alpha-roman",
              "upperroman-upperalpha-digit",
              "zerodigit-alpha-roman"
            ]
          },
          "items": {
            "description": "The items a level write applies to; every item unless set",
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "level": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9
          },
          "levelBy": {
            "type": "number",
            "enum": [
              1,
              -1
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TextSpacingInput": {
        "$id": "#/components/schemas/TextSpacingInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "line": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0
              },
              {
                "type": "null"
              }
            ]
          },
          "before": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ]
          },
          "after": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TextColumnsInput": {
        "$id": "#/components/schemas/TextColumnsInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "columns": {
            "type": "number",
            "enum": [
              1,
              2,
              3
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "columns",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TextIndentInput": {
        "$id": "#/components/schemas/TextIndentInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "by": {
            "description": "One step in (1) or out (-1)",
            "type": "number",
            "enum": [
              1,
              -1
            ]
          },
          "to": {
            "description": "The indent in px",
            "type": "number",
            "minimum": 0
          },
          "items": {
            "description": "List items whose level steps",
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TextCaseInput": {
        "$id": "#/components/schemas/TextCaseInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "path": {
            "type": "string",
            "description": "JSON pointer of the Text inside the block, such as /text"
          },
          "range": {
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2,
            "description": "The range in the plain text of the Text, [start, end], one character per paragraph break"
          },
          "mode": {
            "type": "string",
            "enum": [
              "lower",
              "upper",
              "title"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "path",
          "range",
          "mode",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TextCaseOutput": {
        "$id": "#/components/schemas/TextCaseOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "slide",
          "revision",
          "findings",
          "text"
        ],
        "additionalProperties": false
      },
      "TextInsertInput": {
        "$id": "#/components/schemas/TextInsertInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "path": {
            "type": "string",
            "description": "JSON pointer of the Text inside the block, such as /text"
          },
          "at": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "text": {
            "type": "string",
            "minLength": 1
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "path",
          "at",
          "text",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TextInsertOutput": {
        "$id": "#/components/schemas/TextInsertOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "slide",
          "revision",
          "findings",
          "text"
        ],
        "additionalProperties": false
      },
      "ChartSetDataInput": {
        "$id": "#/components/schemas/ChartSetDataInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "categories": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "series": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "title": "Series name",
                  "x-inspector": {
                    "label": "Series name",
                    "control": "text",
                    "group": "Block"
                  }
                },
                "values": {
                  "type": "array",
                  "items": {
                    "type": "number"
                  },
                  "title": "Values",
                  "x-inspector": {
                    "label": "Values",
                    "control": "json",
                    "group": "Block",
                    "help": "One number per category."
                  },
                  "description": "One number per category."
                },
                "color": {
                  "title": "Series color",
                  "x-inspector": {
                    "label": "Series color",
                    "control": "color",
                    "snap": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ],
                    "group": "Block",
                    "help": "The bars, line or slices of the series; the palette order when absent."
                  },
                  "description": "The bars, line or slices of the series; the palette order when absent.",
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ]
                    },
                    {
                      "type": "string",
                      "pattern": "^#[0-9a-fA-F]{6}$"
                    }
                  ]
                }
              },
              "required": [
                "name",
                "values"
              ],
              "additionalProperties": false
            }
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "categories",
          "series",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ChartSetKindInput": {
        "$id": "#/components/schemas/ChartSetKindInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "kind": {
            "type": "string",
            "enum": [
              "bar",
              "column",
              "line",
              "pie"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "kind",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ChartSetKindOutput": {
        "$id": "#/components/schemas/ChartSetKindOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "dropped": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "slide",
          "revision",
          "findings",
          "dropped"
        ],
        "additionalProperties": false
      },
      "TableMergeInput": {
        "$id": "#/components/schemas/TableMergeInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "from": {
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2
          },
          "to": {
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "from",
          "to",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TableUnmergeInput": {
        "$id": "#/components/schemas/TableUnmergeInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "at": {
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "at",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TableInsertRowsInput": {
        "$id": "#/components/schemas/TableInsertRowsInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "at": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "count": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "where": {
            "type": "string",
            "enum": [
              "above",
              "below"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "at",
          "where",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TableInsertColumnsInput": {
        "$id": "#/components/schemas/TableInsertColumnsInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "at": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "count": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "where": {
            "type": "string",
            "enum": [
              "left",
              "right"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "at",
          "where",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TableDeleteRowsInput": {
        "$id": "#/components/schemas/TableDeleteRowsInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "from": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "to": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "from",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TableDeleteColumnsInput": {
        "$id": "#/components/schemas/TableDeleteColumnsInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "from": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "to": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "from",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TableDistributeInput": {
        "$id": "#/components/schemas/TableDistributeInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "axis": {
            "type": "string",
            "enum": [
              "rows",
              "columns"
            ]
          },
          "total": {
            "description": "The measured or declared total in px",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "range": {
            "description": "The first and last index to distribute; every one unless set",
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "axis",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "TableCellStyleInput": {
        "$id": "#/components/schemas/TableCellStyleInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "cells": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "array",
              "prefixItems": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              ],
              "items": false,
              "minItems": 2,
              "maxItems": 2
            }
          },
          "fill": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "border": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "color": {
                    "title": "Border color",
                    "x-inspector": {
                      "label": "Border color",
                      "control": "color",
                      "snap": [
                        "ink",
                        "paper",
                        "ink-2",
                        "titanium",
                        "hair",
                        "hair-soft",
                        "plate",
                        "edge",
                        "green",
                        "amber",
                        "red",
                        "blue",
                        "accent"
                      ],
                      "group": "Block",
                      "help": "The rule color; the hairline token unless set."
                    },
                    "description": "The rule color; the hairline token unless set.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ink",
                          "paper",
                          "ink-2",
                          "titanium",
                          "hair",
                          "hair-soft",
                          "plate",
                          "edge",
                          "green",
                          "amber",
                          "red",
                          "blue",
                          "accent"
                        ]
                      },
                      {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    ]
                  },
                  "weight": {
                    "title": "Border weight",
                    "x-inspector": {
                      "label": "Border weight",
                      "control": "select",
                      "snap": [
                        0,
                        1,
                        1.5,
                        2
                      ],
                      "group": "Block",
                      "help": "0 draws no rule, 1 is the sheet hairline, 1.5 the diagram stroke, 2 a plate edge."
                    },
                    "description": "0 draws no rule, 1 is the sheet hairline, 1.5 the diagram stroke, 2 a plate edge.",
                    "type": "number",
                    "enum": [
                      0,
                      1,
                      1.5,
                      2
                    ]
                  },
                  "dash": {
                    "title": "Border dash",
                    "x-inspector": {
                      "label": "Border dash",
                      "control": "select",
                      "snap": [
                        "solid",
                        "dot",
                        "dash",
                        "dashDot",
                        "longDash",
                        "longDashDot"
                      ],
                      "group": "Block"
                    },
                    "type": "string",
                    "enum": [
                      "solid",
                      "dot",
                      "dash",
                      "dashDot",
                      "longDash",
                      "longDashDot"
                    ]
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "cells",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShapeSetInput": {
        "$id": "#/components/schemas/ShapeSetInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "kind": {
            "type": "string"
          },
          "adjust": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "number"
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "fill": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "stroke": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ink",
                      "paper",
                      "ink-2",
                      "titanium",
                      "hair",
                      "hair-soft",
                      "plate",
                      "edge",
                      "green",
                      "amber",
                      "red",
                      "blue",
                      "accent"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "width": {
            "anyOf": [
              {
                "type": "number",
                "enum": [
                  1,
                  1.5,
                  2,
                  3,
                  4
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "dash": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "solid",
                  "dot",
                  "dash",
                  "dashDot",
                  "longDash",
                  "longDashDot"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "radius": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "LineSetInput": {
        "$id": "#/components/schemas/LineSetInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "kind": {
            "type": "string",
            "enum": [
              "line",
              "arrow",
              "elbow",
              "curved",
              "curve",
              "polyline",
              "scribble"
            ]
          },
          "start": {
            "type": "string",
            "enum": [
              "none",
              "fillArrow",
              "stealth",
              "fillCircle",
              "fillSquare",
              "fillDiamond",
              "openArrow",
              "openCircle",
              "openSquare",
              "openDiamond"
            ]
          },
          "end": {
            "type": "string",
            "enum": [
              "none",
              "fillArrow",
              "stealth",
              "fillCircle",
              "fillSquare",
              "fillDiamond",
              "openArrow",
              "openCircle",
              "openSquare",
              "openDiamond"
            ]
          },
          "weight": {
            "type": "number",
            "enum": [
              1,
              1.5,
              2,
              3,
              4
            ]
          },
          "dash": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "solid",
                  "dot",
                  "dash",
                  "dashDot",
                  "longDash",
                  "longDashDot"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "bend": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "points": {
            "minItems": 2,
            "type": "array",
            "items": {
              "type": "array",
              "prefixItems": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                }
              ],
              "items": false,
              "minItems": 2,
              "maxItems": 2
            }
          },
          "connect": {
            "type": "object",
            "properties": {
              "start": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "block": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "site": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991,
                        "description": "The index of the target's connection site"
                      }
                    },
                    "required": [
                      "block",
                      "site"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "end": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "block": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "site": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991,
                        "description": "The index of the target's connection site"
                      }
                    },
                    "required": [
                      "block",
                      "site"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DiagramInsertInput": {
        "$id": "#/components/schemas/DiagramInsertInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "kind": {
            "type": "string",
            "enum": [
              "grid",
              "hierarchy",
              "timeline",
              "process",
              "relationship",
              "cycle"
            ]
          },
          "count": {
            "type": "integer",
            "minimum": 2,
            "maximum": 6
          },
          "style": {
            "type": "string",
            "enum": [
              "outline",
              "plate",
              "ink"
            ]
          },
          "pos": {
            "type": "object",
            "properties": {
              "x": {
                "type": "number",
                "title": "X",
                "x-inspector": {
                  "label": "X",
                  "control": "number",
                  "group": "Layout"
                }
              },
              "y": {
                "type": "number",
                "title": "Y",
                "x-inspector": {
                  "label": "Y",
                  "control": "number",
                  "group": "Layout"
                }
              },
              "w": {
                "type": "number",
                "exclusiveMinimum": 0,
                "title": "Width",
                "x-inspector": {
                  "label": "Width",
                  "control": "number",
                  "group": "Layout"
                }
              },
              "h": {
                "type": "number",
                "exclusiveMinimum": 0,
                "title": "Height",
                "x-inspector": {
                  "label": "Height",
                  "control": "number",
                  "group": "Layout"
                }
              },
              "z": {
                "title": "Z order",
                "x-inspector": {
                  "label": "Z order",
                  "control": "number",
                  "group": "Layout",
                  "help": "Higher draws over lower; block.order moves a block through the stack."
                },
                "description": "Higher draws over lower; block.order moves a block through the stack.",
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "rotate": {
                "title": "Rotate",
                "x-inspector": {
                  "label": "Rotate",
                  "control": "number",
                  "snap": [
                    0,
                    15,
                    30,
                    45,
                    90,
                    180,
                    270
                  ],
                  "group": "Layout",
                  "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                },
                "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                "type": "number",
                "minimum": 0,
                "exclusiveMaximum": 360
              },
              "flip": {
                "title": "Flip",
                "x-inspector": {
                  "label": "Flip",
                  "control": "select",
                  "snap": [
                    "h",
                    "v",
                    "hv"
                  ],
                  "group": "Layout",
                  "help": "h mirrors left to right, v top to bottom, hv both."
                },
                "description": "h mirrors left to right, v top to bottom, hv both.",
                "type": "string",
                "enum": [
                  "h",
                  "v",
                  "hv"
                ]
              },
              "group": {
                "title": "Group",
                "x-inspector": {
                  "label": "Group",
                  "control": "readonly",
                  "group": "Layout",
                  "help": "The tag the members of one group share; Group and Ungroup write it."
                },
                "description": "The tag the members of one group share; Group and Ungroup write it.",
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              }
            },
            "required": [
              "x",
              "y",
              "w",
              "h"
            ],
            "additionalProperties": false
          },
          "after": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "kind",
          "count",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DiagramInsertOutput": {
        "$id": "#/components/schemas/DiagramInsertOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "blockIds": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "group": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "slide",
          "revision",
          "findings",
          "blockIds",
          "group"
        ],
        "additionalProperties": false
      },
      "SectionSetInput": {
        "$id": "#/components/schemas/SectionSetInput",
        "type": "object",
        "properties": {
          "sections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Section"
            }
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "sections",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SectionSetOutput": {
        "$id": "#/components/schemas/SectionSetOutput",
        "type": "object",
        "properties": {
          "sections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Section"
            }
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "sections",
          "revision"
        ],
        "additionalProperties": false
      },
      "SlideLeaseInput": {
        "$id": "#/components/schemas/SlideLeaseInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "minutes": {
            "description": "Defaults to 10",
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 120
          },
          "force": {
            "type": "boolean"
          },
          "release": {
            "description": "Give the author’s lease on the slide back",
            "type": "boolean"
          }
        },
        "required": [
          "slideId"
        ],
        "additionalProperties": false
      },
      "AssetAddInput": {
        "$id": "#/components/schemas/AssetAddInput",
        "type": "object",
        "properties": {
          "id": {
            "description": "The asset id; a slug of the file name when omitted",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "file": {
            "description": "A path on the machine, or a data: URL from the studio’s drop or paste",
            "type": "string"
          },
          "url": {
            "description": "An http(s) URL to fetch, 25 MB at most",
            "type": "string",
            "format": "uri"
          },
          "role": {
            "type": "string",
            "enum": [
              "opener",
              "mood",
              "capture",
              "detail",
              "thumb",
              "render",
              "icon",
              "logo",
              "frame",
              "other"
            ]
          },
          "alt": {
            "type": "string"
          },
          "source": {
            "description": "The provenance record; built from title, artist, license and sourceUrl when omitted",
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "material"
                  },
                  "materialId": {
                    "type": "string",
                    "minLength": 1
                  },
                  "uniforms": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "array",
                          "items": {
                            "type": "number"
                          }
                        },
                        {
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "size": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      }
                    ],
                    "items": false,
                    "minItems": 2,
                    "maxItems": 2
                  },
                  "timeMs": {
                    "type": "number",
                    "minimum": 0
                  },
                  "backend": {
                    "type": "string",
                    "enum": [
                      "angle-metal",
                      "swiftshader",
                      "client"
                    ]
                  },
                  "renderer": {
                    "type": "string"
                  },
                  "recipeKey": {
                    "type": "string"
                  },
                  "frameKey": {
                    "type": "string"
                  }
                },
                "required": [
                  "kind",
                  "materialId",
                  "uniforms",
                  "size",
                  "timeMs",
                  "backend",
                  "renderer",
                  "recipeKey"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "capture"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "viewport": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number",
                        "const": 1440
                      },
                      {
                        "type": "number",
                        "const": 900
                      }
                    ],
                    "items": false,
                    "minItems": 2,
                    "maxItems": 2
                  },
                  "scale": {
                    "type": "number",
                    "const": 2
                  },
                  "theme": {
                    "type": "string",
                    "enum": [
                      "light",
                      "dark",
                      "both"
                    ]
                  },
                  "region": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      }
                    ],
                    "items": false,
                    "minItems": 4,
                    "maxItems": 4
                  },
                  "recipe": {
                    "type": "string"
                  }
                },
                "required": [
                  "kind",
                  "url",
                  "viewport",
                  "scale",
                  "theme",
                  "recipe"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "photo"
                  },
                  "origin": {
                    "type": "string",
                    "minLength": 1
                  },
                  "title": {
                    "type": "string"
                  },
                  "artist": {
                    "type": "string"
                  },
                  "license": {
                    "type": "string",
                    "minLength": 1
                  },
                  "shareAlike": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "kind",
                  "origin",
                  "license",
                  "shareAlike"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "file"
                  },
                  "sanitized": {
                    "type": "object",
                    "properties": {
                      "removed": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "removed"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "logo"
                  },
                  "provider": {
                    "type": "string",
                    "const": "thesvg"
                  },
                  "slug": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "variant": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "license": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 400
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "guidelines": {
                    "type": "string",
                    "format": "uri"
                  },
                  "fetchedAt": {
                    "type": "string",
                    "minLength": 1
                  },
                  "digest": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{8,64}$"
                  },
                  "sanitized": {
                    "type": "object",
                    "properties": {
                      "removed": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "removed"
                    ],
                    "additionalProperties": false
                  },
                  "tint": {
                    "type": "object",
                    "properties": {
                      "light": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "dark": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind",
                  "provider",
                  "slug",
                  "variant",
                  "title",
                  "license",
                  "fetchedAt",
                  "digest"
                ],
                "additionalProperties": false
              }
            ]
          },
          "title": {
            "description": "The picture’s name as the source states it",
            "type": "string"
          },
          "artist": {
            "type": "string"
          },
          "license": {
            "description": "CC0, CC BY, CC BY-SA 4.0, public domain, or the text",
            "type": "string"
          },
          "shareAlike": {
            "description": "The license is share-alike: the credit must appear on the plate",
            "type": "boolean"
          },
          "sourceUrl": {
            "description": "Where the picture came from",
            "type": "string",
            "format": "uri"
          },
          "credit": {
            "description": "The plate credit; composed from artist and license when omitted",
            "type": "string"
          },
          "twoTone": {
            "description": "Run the two-tone pipeline; the source is kept as assets/<id>.source.<ext>",
            "type": "boolean"
          },
          "treatment": {
            "type": "object",
            "properties": {
              "crop": {
                "description": "Left, top, right, bottom in source pixels; may reach past the source",
                "type": "array",
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ],
                "items": false,
                "minItems": 4,
                "maxItems": 4
              },
              "channel": {
                "type": "string",
                "enum": [
                  "gray",
                  "r",
                  "g",
                  "b"
                ]
              },
              "invert": {
                "type": "boolean"
              },
              "blur": {
                "type": "number",
                "minimum": 0
              },
              "black": {
                "type": "number",
                "minimum": 0,
                "maximum": 255
              },
              "white": {
                "type": "number",
                "minimum": 0,
                "maximum": 255
              },
              "gamma": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "minFilter": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "polarity": {
                "type": "string",
                "enum": [
                  "dark-ground",
                  "light-ground"
                ]
              }
            },
            "additionalProperties": false
          },
          "plate": {
            "type": "string",
            "enum": [
              "lower-left",
              "lower-right",
              "upper-left"
            ],
            "description": "The plate rectangle the metrics are screened against"
          },
          "upload": {
            "description": "Hosted: the key of a presigned client upload under uploads/<principalId>/ on the private store, for files over 3 MB",
            "type": "string"
          },
          "replaceSource": {
            "description": "Attach the file as the continuous source of this existing asset instead of adding one, so a block dither can re-tone its committed twins (SPEC-3 10.1)",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "role",
          "alt",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "AssetDitherInput": {
        "$id": "#/components/schemas/AssetDitherInput",
        "type": "object",
        "properties": {
          "assetId": {
            "description": "Required unless allTwoTone",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "treatment": {
            "description": "The full treatment to run; the recorded one with the params merged when omitted",
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "two-tone"
                  },
                  "crop": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      }
                    ],
                    "items": false,
                    "minItems": 4,
                    "maxItems": 4,
                    "title": "Crop",
                    "x-inspector": {
                      "label": "Crop",
                      "control": "json",
                      "group": "Asset",
                      "help": "x, y, width, height in source pixels; may reach past the source, which pads with the ground."
                    },
                    "description": "x, y, width, height in source pixels; may reach past the source, which pads with the ground."
                  },
                  "channel": {
                    "title": "Channel",
                    "x-inspector": {
                      "label": "Channel",
                      "control": "select",
                      "snap": [
                        "gray",
                        "r",
                        "g",
                        "b"
                      ],
                      "group": "Asset"
                    },
                    "type": "string",
                    "enum": [
                      "gray",
                      "r",
                      "g",
                      "b"
                    ]
                  },
                  "invert": {
                    "title": "Invert",
                    "x-inspector": {
                      "label": "Invert",
                      "control": "toggle",
                      "group": "Asset"
                    },
                    "type": "boolean"
                  },
                  "blur": {
                    "title": "Blur",
                    "x-inspector": {
                      "label": "Blur",
                      "control": "number",
                      "group": "Asset"
                    },
                    "type": "number",
                    "minimum": 0
                  },
                  "autocontrast": {
                    "type": "number",
                    "const": 0.5
                  },
                  "black": {
                    "title": "Black point",
                    "x-inspector": {
                      "label": "Black point",
                      "control": "number",
                      "group": "Asset"
                    },
                    "type": "number",
                    "minimum": 0,
                    "maximum": 255
                  },
                  "white": {
                    "title": "White point",
                    "x-inspector": {
                      "label": "White point",
                      "control": "number",
                      "group": "Asset"
                    },
                    "type": "number",
                    "minimum": 0,
                    "maximum": 255
                  },
                  "gamma": {
                    "title": "Gamma",
                    "x-inspector": {
                      "label": "Gamma",
                      "control": "number",
                      "group": "Asset"
                    },
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "minFilter": {
                    "title": "Min filter",
                    "x-inspector": {
                      "label": "Min filter",
                      "control": "number",
                      "group": "Asset"
                    },
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "unsharp": {
                    "type": "object",
                    "properties": {
                      "rows": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          }
                        ],
                        "items": false,
                        "minItems": 2,
                        "maxItems": 2
                      },
                      "amount": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "rows",
                      "amount"
                    ],
                    "additionalProperties": false
                  },
                  "polarity": {
                    "type": "string",
                    "enum": [
                      "dark-ground",
                      "light-ground"
                    ],
                    "title": "Polarity",
                    "x-inspector": {
                      "label": "Polarity",
                      "control": "select",
                      "snap": [
                        "dark-ground",
                        "light-ground"
                      ],
                      "group": "Asset"
                    }
                  },
                  "cell": {
                    "type": "number",
                    "const": 2
                  },
                  "bayer": {
                    "type": "number",
                    "const": 8
                  },
                  "resampler": {
                    "type": "string",
                    "const": "lanczos3"
                  }
                },
                "required": [
                  "kind",
                  "crop",
                  "autocontrast",
                  "polarity",
                  "cell",
                  "bayer",
                  "resampler"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "continuous"
                  },
                  "quality": {
                    "type": "number",
                    "enum": [
                      88,
                      92,
                      95
                    ],
                    "title": "JPEG quality",
                    "x-inspector": {
                      "label": "JPEG quality",
                      "control": "select",
                      "snap": [
                        88,
                        92,
                        95
                      ],
                      "group": "Asset"
                    }
                  }
                },
                "required": [
                  "kind",
                  "quality"
                ],
                "additionalProperties": false
              }
            ]
          },
          "params": {
            "description": "Parameters merged over the recorded treatment (--gamma, --black on the CLI)",
            "type": "object",
            "properties": {
              "crop": {
                "description": "Left, top, right, bottom in source pixels; may reach past the source",
                "type": "array",
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ],
                "items": false,
                "minItems": 4,
                "maxItems": 4
              },
              "channel": {
                "type": "string",
                "enum": [
                  "gray",
                  "r",
                  "g",
                  "b"
                ]
              },
              "invert": {
                "type": "boolean"
              },
              "blur": {
                "type": "number",
                "minimum": 0
              },
              "black": {
                "type": "number",
                "minimum": 0,
                "maximum": 255
              },
              "white": {
                "type": "number",
                "minimum": 0,
                "maximum": 255
              },
              "gamma": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "minFilter": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "polarity": {
                "type": "string",
                "enum": [
                  "dark-ground",
                  "light-ground"
                ]
              }
            },
            "additionalProperties": false
          },
          "plate": {
            "type": "string",
            "enum": [
              "lower-left",
              "lower-right",
              "upper-left"
            ],
            "description": "The plate rectangle the metrics are screened against"
          },
          "source": {
            "description": "The continuous source when the asset records none",
            "type": "string"
          },
          "allTwoTone": {
            "description": "Every asset with a two-tone treatment",
            "type": "boolean"
          },
          "fromRecorded": {
            "description": "Read the committed twins back instead of regenerating; metrics are recomputed",
            "type": "boolean"
          },
          "verifyCells": {
            "description": "Regenerate from the source where one exists and count the cells that differ",
            "type": "boolean"
          },
          "pattern": {
            "description": "The threshold texture to regenerate the twins with; bayer8 unless set (SPEC-3 10.5)",
            "type": "string",
            "enum": [
              "bayer8",
              "bayer4",
              "blue64",
              "random"
            ]
          },
          "cell": {
            "description": "Sheet pixels per cell; 2 unless set",
            "type": "number",
            "enum": [
              1,
              2,
              3,
              4
            ]
          },
          "tone": {
            "description": "two, three or original; two unless set",
            "type": "string",
            "enum": [
              "two",
              "three",
              "original"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "AssetDitherOutput": {
        "$id": "#/components/schemas/AssetDitherOutput",
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "assetId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "twins": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "light": {
                        "type": "string",
                        "minLength": 1
                      },
                      "dark": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    "required": [
                      "light",
                      "dark"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "neutral": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    "required": [
                      "neutral"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "metrics": {
                "type": "object",
                "properties": {
                  "litFraction": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "plateClear": {
                    "type": "object",
                    "properties": {
                      "plate": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          }
                        ],
                        "items": false,
                        "minItems": 4,
                        "maxItems": 4
                      },
                      "nearestLitPx": {
                        "type": "number",
                        "minimum": 0
                      },
                      "litUnder": {
                        "type": "number",
                        "minimum": 0
                      },
                      "litInBand": {
                        "type": "number",
                        "minimum": 0
                      }
                    },
                    "required": [
                      "plate",
                      "nearestLitPx",
                      "litUnder",
                      "litInBand"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "litFraction"
                ],
                "additionalProperties": false
              },
              "mismatchedCells": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "twinInverseMismatch": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "missingParameter": {
                "type": "boolean"
              },
              "missingSource": {
                "type": "boolean"
              },
              "missingTwins": {
                "type": "boolean"
              },
              "written": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "assetId",
              "twins",
              "written"
            ],
            "additionalProperties": false
          },
          {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "assetId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "twins": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "light": {
                          "type": "string",
                          "minLength": 1
                        },
                        "dark": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "light",
                        "dark"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "neutral": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "neutral"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "metrics": {
                  "type": "object",
                  "properties": {
                    "litFraction": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    "plateClear": {
                      "type": "object",
                      "properties": {
                        "plate": {
                          "type": "array",
                          "prefixItems": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            }
                          ],
                          "items": false,
                          "minItems": 4,
                          "maxItems": 4
                        },
                        "nearestLitPx": {
                          "type": "number",
                          "minimum": 0
                        },
                        "litUnder": {
                          "type": "number",
                          "minimum": 0
                        },
                        "litInBand": {
                          "type": "number",
                          "minimum": 0
                        }
                      },
                      "required": [
                        "plate",
                        "nearestLitPx",
                        "litUnder",
                        "litInBand"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "litFraction"
                  ],
                  "additionalProperties": false
                },
                "mismatchedCells": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "twinInverseMismatch": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "missingParameter": {
                  "type": "boolean"
                },
                "missingSource": {
                  "type": "boolean"
                },
                "missingTwins": {
                  "type": "boolean"
                },
                "written": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "assetId",
                "twins",
                "written"
              ],
              "additionalProperties": false
            }
          }
        ]
      },
      "AssetCaptureInput": {
        "$id": "#/components/schemas/AssetCaptureInput",
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          },
          "id": {
            "description": "The asset id; a slug of the URL when omitted",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "alt": {
            "type": "string"
          },
          "role": {
            "type": "string",
            "enum": [
              "capture",
              "detail"
            ]
          },
          "viewport": {
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2
          },
          "scale": {
            "type": "number",
            "enum": [
              1,
              2
            ]
          },
          "theme": {
            "type": "string",
            "enum": [
              "light",
              "dark",
              "both"
            ]
          },
          "region": {
            "description": "A CSS-pixel box x, y, w, h inside the page; both twins take the identical region",
            "type": "array",
            "prefixItems": [
              {
                "type": "number"
              },
              {
                "type": "number"
              },
              {
                "type": "number"
              },
              {
                "type": "number"
              }
            ],
            "items": false,
            "minItems": 4,
            "maxItems": 4
          },
          "details": {
            "description": "Identical-region detail crops, one asset each as <id>-detail-<n>",
            "type": "array",
            "items": {
              "type": "array",
              "prefixItems": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                },
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "items": false,
              "minItems": 4,
              "maxItems": 4
            }
          },
          "recipe": {
            "description": "The per-site recipe; gt-site by default",
            "type": "string"
          },
          "settleMs": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "format": {
            "description": "The twin file format; jpg at quality 92 by default",
            "type": "string",
            "enum": [
              "jpg",
              "png"
            ]
          },
          "allowHosts": {
            "description": "Hosts beyond the built-in allowlist (SPEC 11 captureHosts)",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "url",
          "theme",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "MaterialCaptureInput": {
        "$id": "#/components/schemas/MaterialCaptureInput",
        "type": "object",
        "properties": {
          "materialId": {
            "type": "string",
            "minLength": 1
          },
          "preset": {
            "description": "A palette preset of the material, under the uniforms",
            "type": "string"
          },
          "uniforms": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "number"
                  }
                },
                {
                  "type": "string"
                }
              ]
            }
          },
          "size": {
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2
          },
          "anchors": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "number",
              "minimum": 0
            },
            "description": "Frame times in ms"
          },
          "id": {
            "description": "The asset id; <id>-<anchor> per anchor when several",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "role": {
            "type": "string",
            "enum": [
              "opener",
              "mood",
              "frame"
            ]
          },
          "alt": {
            "type": "string"
          },
          "twoTone": {
            "type": "boolean"
          },
          "treatment": {
            "type": "object",
            "properties": {
              "crop": {
                "description": "Left, top, right, bottom in source pixels; may reach past the source",
                "type": "array",
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ],
                "items": false,
                "minItems": 4,
                "maxItems": 4
              },
              "channel": {
                "type": "string",
                "enum": [
                  "gray",
                  "r",
                  "g",
                  "b"
                ]
              },
              "invert": {
                "type": "boolean"
              },
              "blur": {
                "type": "number",
                "minimum": 0
              },
              "black": {
                "type": "number",
                "minimum": 0,
                "maximum": 255
              },
              "white": {
                "type": "number",
                "minimum": 0,
                "maximum": 255
              },
              "gamma": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "minFilter": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "polarity": {
                "type": "string",
                "enum": [
                  "dark-ground",
                  "light-ground"
                ]
              }
            },
            "additionalProperties": false
          },
          "plate": {
            "type": "string",
            "enum": [
              "lower-left",
              "lower-right",
              "upper-left"
            ],
            "description": "The plate rectangle the metrics are screened against"
          },
          "backend": {
            "type": "string",
            "enum": [
              "angle-metal",
              "swiftshader"
            ]
          },
          "frameKey": {
            "description": "The frame key of 5.5 the record carries as source.frameKey",
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "materialId",
          "anchors",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "MaterialCaptureOutput": {
        "$id": "#/components/schemas/MaterialCaptureOutput",
        "anyOf": [
          {
            "$ref": "#/components/schemas/Asset"
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Asset"
            }
          }
        ]
      },
      "MaterialListInput": {
        "$id": "#/components/schemas/MaterialListInput",
        "type": "object",
        "properties": {
          "materialId": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "MaterialListOutput": {
        "$id": "#/components/schemas/MaterialListOutput",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1
            },
            "family": {
              "type": "string",
              "enum": [
                "paper",
                "proto"
              ]
            },
            "label": {
              "type": "string"
            },
            "doc": {
              "type": "string"
            },
            "available": {
              "type": "boolean"
            },
            "credit": {
              "type": "string"
            },
            "license": {
              "type": "string"
            },
            "uniforms": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1
                  },
                  "label": {
                    "type": "string"
                  },
                  "kind": {
                    "type": "string",
                    "enum": [
                      "float",
                      "int",
                      "color",
                      "colors",
                      "enum",
                      "bool"
                    ]
                  },
                  "default": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "number"
                        }
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  "min": {
                    "type": "number"
                  },
                  "max": {
                    "type": "number"
                  },
                  "step": {
                    "type": "number"
                  },
                  "options": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "value": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "name",
                        "value"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "maxCount": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "help": {
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "label",
                  "kind",
                  "default"
                ],
                "additionalProperties": false
              }
            },
            "presets": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1
                  },
                  "label": {
                    "type": "string"
                  },
                  "doc": {
                    "type": "string"
                  },
                  "uniforms": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "array",
                          "items": {
                            "type": "number"
                          }
                        },
                        {
                          "type": "string"
                        }
                      ]
                    }
                  }
                },
                "required": [
                  "name",
                  "label",
                  "doc",
                  "uniforms"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "id",
            "family",
            "label",
            "doc",
            "available",
            "credit",
            "license",
            "uniforms",
            "presets"
          ],
          "additionalProperties": false
        }
      },
      "RenderSlideInput": {
        "$id": "#/components/schemas/RenderSlideInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "anyOf": [
              {
                "type": "string",
                "const": "all"
              },
              {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                }
              }
            ],
            "description": "Slide ids, or 'all'"
          },
          "themes": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "light",
                "dark"
              ]
            },
            "description": "One or both themes"
          },
          "scale": {
            "type": "number",
            "enum": [
              1,
              2
            ]
          },
          "format": {
            "type": "string",
            "enum": [
              "png",
              "jpg"
            ]
          },
          "out": {
            "description": "Output directory; defaults to .turboslide/render",
            "type": "string"
          }
        },
        "required": [
          "slideIds"
        ],
        "additionalProperties": false
      },
      "RenderSlideOutput": {
        "$id": "#/components/schemas/RenderSlideOutput",
        "type": "object",
        "properties": {
          "records": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RenderRecord"
            }
          },
          "images": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "records",
          "images"
        ],
        "additionalProperties": false
      },
      "RenderSheetInput": {
        "$id": "#/components/schemas/RenderSheetInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "anyOf": [
              {
                "type": "string",
                "const": "all"
              },
              {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                }
              }
            ],
            "description": "Slide ids, or 'all'"
          },
          "themes": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "light",
                "dark"
              ]
            },
            "description": "One or both themes"
          },
          "cols": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "thumb": {
            "description": "Thumbnail width in px",
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "numbered": {
            "type": "boolean"
          },
          "overlay": {
            "type": "string",
            "enum": [
              "lint",
              "plate"
            ]
          },
          "out": {
            "type": "string"
          }
        },
        "required": [
          "slideIds"
        ],
        "additionalProperties": false
      },
      "RenderSheetOutput": {
        "$id": "#/components/schemas/RenderSheetOutput",
        "type": "object",
        "properties": {
          "sheets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "theme": {
                  "type": "string",
                  "enum": [
                    "light",
                    "dark"
                  ]
                },
                "image": {
                  "type": "string"
                },
                "cells": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "n": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "box": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          },
                          {
                            "type": "number"
                          }
                        ],
                        "items": false,
                        "minItems": 4,
                        "maxItems": 4
                      }
                    },
                    "required": [
                      "slideId",
                      "n",
                      "box"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "theme",
                "image",
                "cells"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "sheets"
        ],
        "additionalProperties": false
      },
      "LintRunInput": {
        "$id": "#/components/schemas/LintRunInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "anyOf": [
              {
                "type": "string",
                "const": "all"
              },
              {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                }
              }
            ],
            "description": "Slide ids, or 'all'"
          },
          "layers": {
            "type": "string",
            "enum": [
              "static",
              "rendered",
              "both"
            ]
          },
          "rule": {
            "type": "string",
            "enum": [
              "sheet/overflow",
              "sheet/rail-touch",
              "sheet/thumb-legible",
              "type/floor-15",
              "type/svg-label-min",
              "type/weight-cap",
              "type/face",
              "type/sizes-ladder",
              "type/ladder",
              "text/overflow",
              "color/tokens-only",
              "color/semantic-icons-only",
              "color/off-palette",
              "icon/placement",
              "icon/known",
              "rows/two-lines",
              "rows/key-snap",
              "dia/label-clearance",
              "dia/stroke-grammar",
              "dia/fit-slot",
              "dia/half-pixel",
              "asset/twin-or-border",
              "asset/credit-on-plate",
              "asset/license-missing",
              "asset/stretched",
              "picture/plate-clear",
              "picture/blank-twin",
              "picture/mood-placement",
              "opener/sentence-lists-section",
              "lines/law",
              "copy/heading-period",
              "copy/sentence-case",
              "copy/token-first",
              "copy/heading-is-name",
              "copy/no-em-dash",
              "copy/no-exclamation",
              "copy/no-eyebrow",
              "copy/full-sentence-caption",
              "copy/contrast-pair",
              "copy/metaphor-candidate",
              "copy/empty-placeholder",
              "table/size",
              "chart/size",
              "contrast/both-themes",
              "layout/empty-half",
              "layout/pair-gaps",
              "layout/columns-aligned",
              "layout/freeform",
              "freeform/overlap",
              "freeform/off-sheet",
              "scales/marker-equals-value",
              "escape/html-block",
              "html/sanitize",
              "export/non-native",
              "numbers/contradiction",
              "count/hard-coded"
            ]
          }
        },
        "required": [
          "slideIds"
        ],
        "additionalProperties": false
      },
      "LintRunOutput": {
        "$id": "#/components/schemas/LintRunOutput",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Finding"
        }
      },
      "FixRunInput": {
        "$id": "#/components/schemas/FixRunInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "anyOf": [
              {
                "type": "string",
                "const": "all"
              },
              {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                }
              }
            ],
            "description": "Slide ids, or 'all'"
          },
          "rule": {
            "type": "string",
            "enum": [
              "sheet/overflow",
              "sheet/rail-touch",
              "sheet/thumb-legible",
              "type/floor-15",
              "type/svg-label-min",
              "type/weight-cap",
              "type/face",
              "type/sizes-ladder",
              "type/ladder",
              "text/overflow",
              "color/tokens-only",
              "color/semantic-icons-only",
              "color/off-palette",
              "icon/placement",
              "icon/known",
              "rows/two-lines",
              "rows/key-snap",
              "dia/label-clearance",
              "dia/stroke-grammar",
              "dia/fit-slot",
              "dia/half-pixel",
              "asset/twin-or-border",
              "asset/credit-on-plate",
              "asset/license-missing",
              "asset/stretched",
              "picture/plate-clear",
              "picture/blank-twin",
              "picture/mood-placement",
              "opener/sentence-lists-section",
              "lines/law",
              "copy/heading-period",
              "copy/sentence-case",
              "copy/token-first",
              "copy/heading-is-name",
              "copy/no-em-dash",
              "copy/no-exclamation",
              "copy/no-eyebrow",
              "copy/full-sentence-caption",
              "copy/contrast-pair",
              "copy/metaphor-candidate",
              "copy/empty-placeholder",
              "table/size",
              "chart/size",
              "contrast/both-themes",
              "layout/empty-half",
              "layout/pair-gaps",
              "layout/columns-aligned",
              "layout/freeform",
              "freeform/overlap",
              "freeform/off-sheet",
              "scales/marker-equals-value",
              "escape/html-block",
              "html/sanitize",
              "export/non-native",
              "numbers/contradiction",
              "count/hard-coded"
            ]
          },
          "dryRun": {
            "type": "boolean"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "FixRunOutput": {
        "$id": "#/components/schemas/FixRunOutput",
        "type": "object",
        "properties": {
          "applied": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "remaining": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "applied",
          "remaining",
          "revision"
        ],
        "additionalProperties": false
      },
      "DiffRunInput": {
        "$id": "#/components/schemas/DiffRunInput",
        "type": "object",
        "properties": {
          "from": {
            "description": "The older revision; omitted with staged, the last named version",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "to": {
            "description": "Defaults to the current revision",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "staged": {
            "description": "Diff from the newest named version below the current revision",
            "type": "boolean"
          },
          "render": {
            "description": "Write before and after crops of every touched block",
            "type": "boolean"
          },
          "themes": {
            "description": "Themes to render the crops in; defaults to light",
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "light",
                "dark"
              ]
            }
          },
          "out": {
            "description": "Crop directory; defaults to .turboslide/diff",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "DiffRunOutput": {
        "$id": "#/components/schemas/DiffRunOutput",
        "type": "object",
        "properties": {
          "from": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "to": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "mutations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Mutation"
            }
          },
          "prose": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "crops": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slideId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "blockId": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                },
                "theme": {
                  "type": "string",
                  "enum": [
                    "light",
                    "dark"
                  ]
                },
                "before": {
                  "type": "string",
                  "description": "The crop's path; '' when the slide is absent before"
                },
                "after": {
                  "type": "string",
                  "description": "The crop's path; '' when the slide is absent after"
                }
              },
              "required": [
                "slideId",
                "theme",
                "before",
                "after"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "from",
          "to",
          "mutations",
          "prose"
        ],
        "additionalProperties": false
      },
      "VersionSaveInput": {
        "$id": "#/components/schemas/VersionSaveInput",
        "type": "object",
        "properties": {
          "note": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "note"
        ],
        "additionalProperties": false
      },
      "VersionListOutput": {
        "$id": "#/components/schemas/VersionListOutput",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Version"
        }
      },
      "VersionRestoreInput": {
        "$id": "#/components/schemas/VersionRestoreInput",
        "type": "object",
        "properties": {
          "n": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "n",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "VersionRestoreOutput": {
        "$id": "#/components/schemas/VersionRestoreOutput",
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "revision"
        ],
        "additionalProperties": false
      },
      "JudgeBundleInput": {
        "$id": "#/components/schemas/JudgeBundleInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "anyOf": [
              {
                "type": "string",
                "const": "all"
              },
              {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                }
              }
            ],
            "description": "Slide ids, or 'all'"
          },
          "out": {
            "type": "string"
          }
        },
        "required": [
          "slideIds",
          "out"
        ],
        "additionalProperties": false
      },
      "JudgeBundleOutput": {
        "$id": "#/components/schemas/JudgeBundleOutput",
        "type": "object",
        "properties": {
          "dir": {
            "type": "string"
          },
          "files": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "dir",
          "files",
          "revision"
        ],
        "additionalProperties": false
      },
      "ViewGotoInput": {
        "$id": "#/components/schemas/ViewGotoInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "slideId"
        ],
        "additionalProperties": false
      },
      "ViewGotoOutput": {
        "$id": "#/components/schemas/ViewGotoOutput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "n": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "mode": {
            "type": "string",
            "enum": [
              "slide",
              "grid",
              "book"
            ]
          },
          "theme": {
            "type": "string",
            "enum": [
              "light",
              "dark"
            ]
          },
          "present": {
            "type": "boolean"
          },
          "edit": {
            "type": "boolean"
          },
          "zoom": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0
              },
              {
                "type": "string",
                "const": "fit"
              }
            ]
          },
          "scroll": {
            "type": "object",
            "properties": {
              "x": {
                "type": "number"
              },
              "y": {
                "type": "number"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "slideId",
          "n",
          "mode",
          "theme",
          "present"
        ],
        "additionalProperties": false
      },
      "ViewModeInput": {
        "$id": "#/components/schemas/ViewModeInput",
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "slide",
              "grid",
              "book"
            ]
          }
        },
        "required": [
          "mode"
        ],
        "additionalProperties": false
      },
      "ViewThemeInput": {
        "$id": "#/components/schemas/ViewThemeInput",
        "type": "object",
        "properties": {
          "theme": {
            "type": "string",
            "enum": [
              "light",
              "dark"
            ]
          }
        },
        "required": [
          "theme"
        ],
        "additionalProperties": false
      },
      "ViewPresentInput": {
        "$id": "#/components/schemas/ViewPresentInput",
        "type": "object",
        "properties": {
          "on": {
            "type": "boolean"
          }
        },
        "required": [
          "on"
        ],
        "additionalProperties": false
      },
      "ViewZoomInput": {
        "$id": "#/components/schemas/ViewZoomInput",
        "type": "object",
        "properties": {
          "zoom": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.25,
                "maximum": 16
              },
              {
                "type": "string",
                "const": "fit"
              }
            ],
            "description": "A factor between 0.25 and 16 (25 to 1600 percent), or 'fit' for the stage's own fit"
          },
          "center": {
            "description": "The sheet point kept under the stage centre; the sheet centre unless set",
            "type": "object",
            "properties": {
              "x": {
                "type": "number"
              },
              "y": {
                "type": "number"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "zoom"
        ],
        "additionalProperties": false
      },
      "ExportRunInput": {
        "$id": "#/components/schemas/ExportRunInput",
        "type": "object",
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "pptx",
              "pdf"
            ]
          },
          "mode": {
            "description": "Defaults to flatten, the perfect mode: a 2x page raster over an invisible text layer, every page measured within 0.1 percent (SPEC 8.2)",
            "type": "string",
            "enum": [
              "native",
              "flatten"
            ]
          },
          "theme": {
            "description": "One file per theme; defaults to both, which also writes <deckId>-both.zip",
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "light",
                "dark"
              ]
            }
          },
          "fonts": {
            "description": "The export font set (SPEC 8.4; docs/DESIGN.md 4.3): standard names Inter, Inter Medium, Inter Display and Inter Display Medium, exact names Inter Text 14 to Inter Text 26; defaults to standard",
            "type": "string",
            "enum": [
              "exact",
              "standard"
            ]
          },
          "embedFonts": {
            "description": "Native mode only: embed the export faces as fntdata parts; off by default, and flatten never embeds (docs/pptx.md)",
            "type": "boolean"
          },
          "headings": {
            "description": "Write every heading as a PNG instead of a text box (SPEC 8.3)",
            "type": "string",
            "const": "raster"
          },
          "rasterScale": {
            "description": "Device pixels per sheet pixel of the raster PNGs: auto (3x icons and marks, 2x the rest), 2 or 3 (SPEC 8.6)",
            "anyOf": [
              {
                "type": "string",
                "const": "auto"
              },
              {
                "type": "number",
                "const": 2
              },
              {
                "type": "number",
                "const": 3
              }
            ]
          },
          "pictureScale": {
            "description": "The scale two-tone pictures are regenerated at from the one-bit image (SPEC 8.2)",
            "type": "number",
            "enum": [
              2,
              3
            ]
          },
          "excludeShareAlike": {
            "description": "Replace share-alike pictures with the paper plate and its credit (SPEC 11, open question 12)",
            "type": "boolean"
          },
          "svgVector": {
            "description": "Write the vector of every svg picture and logo as asvg:svgBlip beside its PNG blip (docs/archive/rounds/VECTOR.md 4.6); on by default. false writes the PNG blip alone, which the parked control export.svg.vector selects",
            "type": "boolean"
          },
          "baseline": {
            "description": "The renderer whose measured first-baseline constant offsets native text boxes (calibration.json); defaults to libreoffice, the verify renderer",
            "type": "string",
            "enum": [
              "libreoffice",
              "none"
            ]
          },
          "verify": {
            "description": "Render the files back through LibreOffice and diff every page against the web render (SPEC 8.5)",
            "type": "boolean"
          },
          "slideIds": {
            "description": "A subset to export; defaults to 'all'",
            "anyOf": [
              {
                "type": "string",
                "const": "all"
              },
              {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                }
              }
            ]
          },
          "includeSkipped": {
            "description": "Export the skipped slides too; left out by default",
            "type": "boolean"
          },
          "includeNotes": {
            "description": "Carry the speaker notes; left out by default",
            "type": "boolean"
          },
          "includeComments": {
            "description": "Write the comment threads as classic p:cm parts, editors and owners only; left out by default",
            "type": "boolean"
          },
          "out": {
            "description": "Output directory; defaults to .turboslide/export",
            "type": "string"
          },
          "batch": {
            "description": "Hosted only (window and http): render one batch of slides of a batched export into the job",
            "type": "object",
            "properties": {
              "index": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "of": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "jobId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "index",
              "of",
              "jobId"
            ],
            "additionalProperties": false
          },
          "merge": {
            "description": "Hosted only: build the file from the stored batches of the job (SPEC-2 8.1)",
            "type": "object",
            "properties": {
              "jobId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "jobId"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "format"
        ],
        "additionalProperties": false
      },
      "ExportCheckInput": {
        "$id": "#/components/schemas/ExportCheckInput",
        "type": "object",
        "properties": {
          "file": {
            "type": "string",
            "description": "The .pptx to check"
          },
          "python": {
            "description": "An interpreter with python-pptx; defaults to TURBOSLIDE_PYTHON, then .turboslide/venv/bin/python when it exists",
            "type": "string"
          },
          "quickLook": {
            "description": "Render the first page through macOS QuickLook when qlmanage exists; defaults to on",
            "type": "boolean"
          },
          "out": {
            "description": "Where the QuickLook thumbnail lands; defaults to a folder beside the file",
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "additionalProperties": false
      },
      "ExportCheckOutput": {
        "$id": "#/components/schemas/ExportCheckOutput",
        "type": "object",
        "properties": {
          "file": {
            "type": "string"
          },
          "bytes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "parts": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "slides": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "notes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "pageSize": {
            "type": "object",
            "properties": {
              "cx": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "cy": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "cx",
              "cy"
            ],
            "additionalProperties": false
          },
          "pageSizeOk": {
            "type": "boolean"
          },
          "slideNames": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "titledSlides": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "formats": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "mediaBytes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "embeddedFonts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "custGeom": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "normAutofit": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "kernZero": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "shapes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "outOfBounds": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "italicRuns": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "rotated": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "groups": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "charts": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "connectors": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "numCol": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "avLst": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "tables": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "mergedCells": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "relationships": {
            "type": "object",
            "properties": {
              "checked": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "invalid": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "checked",
              "invalid"
            ],
            "additionalProperties": false
          },
          "contentTypes": {
            "type": "object",
            "properties": {
              "undeclared": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "missingOverrides": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "undeclared",
              "missingOverrides"
            ],
            "additionalProperties": false
          },
          "pythonPptx": {
            "type": "object",
            "properties": {
              "ran": {
                "type": "boolean"
              },
              "python": {
                "type": "string"
              },
              "slides": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "shapes": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "error": {
                "type": "string"
              }
            },
            "required": [
              "ran"
            ],
            "additionalProperties": false
          },
          "quickLook": {
            "type": "object",
            "properties": {
              "ran": {
                "type": "boolean"
              },
              "png": {
                "type": "string"
              },
              "width": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "height": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "ms": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "error": {
                "type": "string"
              }
            },
            "required": [
              "ran"
            ],
            "additionalProperties": false
          },
          "issues": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "valid": {
            "type": "boolean"
          }
        },
        "required": [
          "file",
          "bytes",
          "parts",
          "slides",
          "notes",
          "pageSize",
          "pageSizeOk",
          "slideNames",
          "titledSlides",
          "formats",
          "mediaBytes",
          "embeddedFonts",
          "custGeom",
          "normAutofit",
          "kernZero",
          "shapes",
          "outOfBounds",
          "relationships",
          "contentTypes",
          "pythonPptx",
          "quickLook",
          "issues",
          "valid"
        ],
        "additionalProperties": false
      },
      "ExportTextInput": {
        "$id": "#/components/schemas/ExportTextInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "description": "A subset; defaults to 'all'",
            "anyOf": [
              {
                "type": "string",
                "const": "all"
              },
              {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                }
              }
            ]
          },
          "includeNotes": {
            "description": "Append each slide’s speaker notes",
            "type": "boolean"
          },
          "includeSkipped": {
            "description": "Include the skipped slides",
            "type": "boolean"
          },
          "includeComments": {
            "description": "Append each slide’s comment threads, for readers with readComments (SPEC-3 5.8)",
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ExportTextOutput": {
        "$id": "#/components/schemas/ExportTextOutput",
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          },
          "slides": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "How many slides the text covers"
          },
          "bytes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "text",
          "slides",
          "bytes"
        ],
        "additionalProperties": false
      },
      "BuildRunInput": {
        "$id": "#/components/schemas/BuildRunInput",
        "type": "object",
        "properties": {
          "out": {
            "type": "string"
          },
          "budgetMB": {
            "description": "Defaults to 16",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "quality": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "includeSkipped": {
            "description": "Build the skipped slides too; left out by default",
            "type": "boolean"
          },
          "includeNotes": {
            "description": "Carry the speaker notes into the file",
            "type": "boolean"
          }
        },
        "required": [
          "out"
        ],
        "additionalProperties": false
      },
      "BuildRunOutput": {
        "$id": "#/components/schemas/BuildRunOutput",
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "bytes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "assertions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "passed": {
                  "type": "boolean"
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "name",
                "passed",
                "detail"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "path",
          "bytes",
          "assertions"
        ],
        "additionalProperties": false
      },
      "FontsBuildInput": {
        "$id": "#/components/schemas/FontsBuildInput",
        "type": "object",
        "properties": {
          "check": {
            "description": "Compare the committed set with a fresh build; exit 1 when it differs",
            "type": "boolean"
          },
          "python": {
            "description": "The Python binary; defaults to .turboslide/venv/bin/python, created from scripts/requirements.txt when missing",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "FontsBuildOutput": {
        "$id": "#/components/schemas/FontsBuildOutput",
        "type": "object",
        "properties": {
          "out": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "faces": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "file": {
                  "type": "string"
                },
                "family": {
                  "type": "string"
                },
                "opsz": {
                  "type": "number"
                },
                "weight": {
                  "type": "number"
                },
                "bytes": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "file",
                "family",
                "opsz",
                "weight",
                "bytes"
              ],
              "additionalProperties": false
            }
          },
          "written": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "stale": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "out",
          "version",
          "faces",
          "written",
          "stale"
        ],
        "additionalProperties": false
      },
      "ImportRunInput": {
        "$id": "#/components/schemas/ImportRunInput",
        "type": "object",
        "properties": {
          "from": {
            "type": "string"
          },
          "into": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "from",
          "into"
        ],
        "additionalProperties": false
      },
      "ImportRunOutput": {
        "$id": "#/components/schemas/ImportRunOutput",
        "type": "object",
        "properties": {
          "slides": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "sections": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "htmlBlocks": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "report": {
            "type": "string",
            "description": "Path of import-report.json"
          }
        },
        "required": [
          "slides",
          "sections",
          "htmlBlocks",
          "report"
        ],
        "additionalProperties": false
      },
      "ValidateRunInput": {
        "$id": "#/components/schemas/ValidateRunInput",
        "type": "object",
        "properties": {
          "path": {
            "description": "Deck directory; defaults to the current deck",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ValidateRunOutput": {
        "$id": "#/components/schemas/ValidateRunOutput",
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "issues": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string"
                },
                "severity": {
                  "type": "number",
                  "enum": [
                    1,
                    2,
                    3
                  ]
                },
                "file": {
                  "type": "string"
                },
                "pointer": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              },
              "required": [
                "code",
                "severity",
                "file",
                "pointer",
                "message"
              ],
              "additionalProperties": false
            }
          },
          "revision": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "ok",
          "issues",
          "revision"
        ],
        "additionalProperties": false
      },
      "SourceReadOutput": {
        "$id": "#/components/schemas/SourceReadOutput",
        "type": "string"
      },
      "SourceApplyInput": {
        "$id": "#/components/schemas/SourceApplyInput",
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          }
        ]
      },
      "SourceApplyOutput": {
        "$id": "#/components/schemas/SourceApplyOutput",
        "type": "null"
      },
      "ControlsListOutput": {
        "$id": "#/components/schemas/ControlsListOutput",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "button",
                "checkbox",
                "input",
                "select",
                "textarea",
                "textbox"
              ]
            },
            "label": {
              "type": "string"
            },
            "control": {
              "description": "The data-control id",
              "type": "string"
            },
            "value": {
              "type": [
                "boolean",
                "string"
              ]
            }
          },
          "required": [
            "kind",
            "label"
          ],
          "additionalProperties": false
        }
      },
      "ControlActivateInput": {
        "$id": "#/components/schemas/ControlActivateInput",
        "type": "string",
        "description": "The accessible label or data-control id"
      },
      "ControlActivateOutput": {
        "$id": "#/components/schemas/ControlActivateOutput",
        "type": "null"
      },
      "ControlSetInput": {
        "$id": "#/components/schemas/ControlSetInput",
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "value": {
            "type": [
              "boolean",
              "string",
              "number"
            ]
          }
        },
        "required": [
          "label",
          "value"
        ],
        "additionalProperties": false
      },
      "ControlSetOutput": {
        "$id": "#/components/schemas/ControlSetOutput",
        "type": "null"
      },
      "ArtifactDownloadInput": {
        "$id": "#/components/schemas/ArtifactDownloadInput",
        "type": "object",
        "properties": {
          "fileName": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "fileName"
        ],
        "additionalProperties": false
      },
      "ArtifactDownloadOutput": {
        "$id": "#/components/schemas/ArtifactDownloadOutput",
        "type": "null"
      },
      "DeckTailorInput": {
        "$id": "#/components/schemas/DeckTailorInput",
        "type": "object",
        "properties": {
          "replacements": {
            "description": "Case insensitive, over every visible text and the notes, as Find and replace runs",
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "from": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The customer name as the deck spells it"
                },
                "to": {
                  "type": "string",
                  "description": "The name that takes its place"
                }
              },
              "required": [
                "from",
                "to"
              ],
              "additionalProperties": false
            }
          },
          "logo": {
            "type": "object",
            "properties": {
              "assetId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                "description": "An asset of this deck (asset.add first)"
              },
              "replaceAlt": {
                "description": "Swap every picture whose alt text names this word for the asset; without it the kit’s logo slot takes the asset once the brand kit exists on this deck",
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "assetId"
            ],
            "additionalProperties": false
          },
          "skip": {
            "description": "The slides to skip",
            "maxItems": 200,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DeckTailorOutput": {
        "$id": "#/components/schemas/DeckTailorOutput",
        "type": "object",
        "properties": {
          "replacements": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "slideIds": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "The slides whose text changed"
          },
          "pictures": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The pictures swapped"
          },
          "skipped": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "replacements",
          "slideIds",
          "pictures",
          "skipped",
          "revision"
        ],
        "additionalProperties": false
      },
      "AssistProposeInput": {
        "$id": "#/components/schemas/AssistProposeInput",
        "type": "object",
        "properties": {
          "intent": {
            "type": "string",
            "enum": [
              "shorter",
              "notes",
              "ask"
            ],
            "description": "'shorter' rewrites the slide’s text shorter, 'notes' writes speaker notes, 'ask' resolves the prompt to one of the two"
          },
          "prompt": {
            "type": "string",
            "maxLength": 2000,
            "description": "The seller’s ask, in their words; empty for a starter card"
          },
          "slideIds": {
            "description": "The slides the ask is about; the deck’s first slides when absent",
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "intent",
          "prompt",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "AssistProposeOutput": {
        "$id": "#/components/schemas/AssistProposeOutput",
        "type": "object",
        "properties": {
          "cards": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1
                },
                "intent": {
                  "type": "string",
                  "enum": [
                    "shorter",
                    "notes",
                    "ask"
                  ]
                },
                "sentence": {
                  "type": "string",
                  "minLength": 1
                },
                "rows": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "blockId": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "path": {
                        "type": "string"
                      },
                      "before": {
                        "type": "string"
                      },
                      "after": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "slideId",
                      "path",
                      "before",
                      "after"
                    ],
                    "additionalProperties": false
                  }
                },
                "mutations": {
                  "minItems": 1,
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Mutation"
                  }
                },
                "deckId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "baseRevision": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991,
                  "description": "The revision the caller read; a stale value is rejected with 409"
                },
                "expiresAt": {
                  "type": "string",
                  "description": "ISO 8601; a card is valid for ten minutes"
                },
                "signature": {
                  "type": "string",
                  "pattern": "^[0-9a-f]{64}$"
                }
              },
              "required": [
                "id",
                "intent",
                "sentence",
                "rows",
                "mutations",
                "deckId",
                "baseRevision",
                "expiresAt",
                "signature"
              ],
              "additionalProperties": false
            }
          },
          "sentence": {
            "type": "string"
          },
          "readSlides": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "cards"
        ],
        "additionalProperties": false
      },
      "AssistAcceptInput": {
        "$id": "#/components/schemas/AssistAcceptInput",
        "type": "object",
        "properties": {
          "card": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "intent": {
                "type": "string",
                "enum": [
                  "shorter",
                  "notes",
                  "ask"
                ]
              },
              "sentence": {
                "type": "string",
                "minLength": 1
              },
              "rows": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "slideId": {
                      "type": "string",
                      "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                    },
                    "blockId": {
                      "type": "string",
                      "pattern": "^[a-z0-9][a-z0-9-]*$"
                    },
                    "path": {
                      "type": "string"
                    },
                    "before": {
                      "type": "string"
                    },
                    "after": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "slideId",
                    "path",
                    "before",
                    "after"
                  ],
                  "additionalProperties": false
                }
              },
              "mutations": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Mutation"
                }
              },
              "deckId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "baseRevision": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991,
                "description": "The revision the caller read; a stale value is rejected with 409"
              },
              "expiresAt": {
                "type": "string",
                "description": "ISO 8601; a card is valid for ten minutes"
              },
              "signature": {
                "type": "string",
                "pattern": "^[0-9a-f]{64}$"
              }
            },
            "required": [
              "id",
              "intent",
              "sentence",
              "rows",
              "mutations",
              "deckId",
              "baseRevision",
              "expiresAt",
              "signature"
            ],
            "additionalProperties": false
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "card",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "AssistAcceptOutput": {
        "$id": "#/components/schemas/AssistAcceptOutput",
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "slideIds": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "sentence": {
            "type": "string"
          }
        },
        "required": [
          "revision",
          "slideIds",
          "sentence"
        ],
        "additionalProperties": false
      },
      "BrandGetOutput": {
        "$id": "#/components/schemas/BrandGetOutput",
        "type": "object",
        "properties": {
          "brand": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "appearance": {
                "type": "string",
                "enum": [
                  "light",
                  "dark"
                ]
              },
              "colors": {
                "type": "object",
                "properties": {
                  "light": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "background": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "caption": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "hint": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "primary": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "accent": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  },
                  "dark": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "background": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "caption": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "hint": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "primary": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "accent": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              "fonts": {
                "type": "object",
                "properties": {
                  "display": {
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  },
                  "text": {
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "mark": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "default",
                      "none",
                      "picture"
                    ]
                  },
                  "assetId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "box": {
                    "type": "object",
                    "properties": {
                      "w": {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 1600
                      },
                      "h": {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 900
                      }
                    },
                    "required": [
                      "w",
                      "h"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind"
                ],
                "additionalProperties": false
              },
              "footer": {
                "type": "object",
                "properties": {
                  "logo": {
                    "type": "string",
                    "enum": [
                      "default",
                      "none",
                      "picture"
                    ]
                  },
                  "assetId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "text": {
                    "type": "string",
                    "maxLength": 200
                  }
                },
                "additionalProperties": false
              },
              "counter": {
                "type": "object",
                "properties": {
                  "show": {
                    "type": "boolean"
                  },
                  "format": {
                    "type": "string",
                    "enum": [
                      "n / N",
                      "n",
                      "Slide n"
                    ]
                  },
                  "skipTitle": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "frame": {
                "type": "object",
                "properties": {
                  "rails": {
                    "type": "boolean"
                  },
                  "rules": {
                    "type": "boolean"
                  },
                  "crosses": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "positions": {
                "type": "object",
                "properties": {
                  "mark": {
                    "type": "string",
                    "enum": [
                      "top-left",
                      "top-right",
                      "bottom-left",
                      "bottom-right",
                      "hidden"
                    ]
                  },
                  "footerLogo": {
                    "type": "string",
                    "enum": [
                      "top-left",
                      "top-right",
                      "bottom-left",
                      "bottom-right",
                      "hidden"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "lexicon": {
                "maxItems": 200,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                }
              }
            },
            "additionalProperties": false
          },
          "own": {
            "type": "boolean"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "brand",
          "own",
          "revision"
        ],
        "additionalProperties": false
      },
      "BrandSetInput": {
        "$id": "#/components/schemas/BrandSetInput",
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "pattern": "^\\/(name|appearance|colors|fonts|mark|footer|counter|frame|positions|lexicon)(\\/[A-Za-z0-9_-]+){0,2}$",
            "description": "A JSON pointer into the kit: /colors/<light|dark>/<text|background|caption|hint|primary|accent>, /fonts/<display|text>, /mark, /footer/<logo|assetId|text>, /counter/<show|format|skipTitle>, /frame/<rails|rules|crosses>, /positions/<mark|footerLogo>, /lexicon, /appearance, /name"
          },
          "value": {
            "description": "The new value; omit it to remove the field"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "path",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BrandSetOutput": {
        "$id": "#/components/schemas/BrandSetOutput",
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "value": {},
          "brand": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "appearance": {
                "type": "string",
                "enum": [
                  "light",
                  "dark"
                ]
              },
              "colors": {
                "type": "object",
                "properties": {
                  "light": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "background": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "caption": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "hint": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "primary": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "accent": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  },
                  "dark": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "background": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "caption": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "hint": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "primary": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "accent": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              "fonts": {
                "type": "object",
                "properties": {
                  "display": {
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  },
                  "text": {
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "mark": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "default",
                      "none",
                      "picture"
                    ]
                  },
                  "assetId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "box": {
                    "type": "object",
                    "properties": {
                      "w": {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 1600
                      },
                      "h": {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 900
                      }
                    },
                    "required": [
                      "w",
                      "h"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind"
                ],
                "additionalProperties": false
              },
              "footer": {
                "type": "object",
                "properties": {
                  "logo": {
                    "type": "string",
                    "enum": [
                      "default",
                      "none",
                      "picture"
                    ]
                  },
                  "assetId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "text": {
                    "type": "string",
                    "maxLength": 200
                  }
                },
                "additionalProperties": false
              },
              "counter": {
                "type": "object",
                "properties": {
                  "show": {
                    "type": "boolean"
                  },
                  "format": {
                    "type": "string",
                    "enum": [
                      "n / N",
                      "n",
                      "Slide n"
                    ]
                  },
                  "skipTitle": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "frame": {
                "type": "object",
                "properties": {
                  "rails": {
                    "type": "boolean"
                  },
                  "rules": {
                    "type": "boolean"
                  },
                  "crosses": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "positions": {
                "type": "object",
                "properties": {
                  "mark": {
                    "type": "string",
                    "enum": [
                      "top-left",
                      "top-right",
                      "bottom-left",
                      "bottom-right",
                      "hidden"
                    ]
                  },
                  "footerLogo": {
                    "type": "string",
                    "enum": [
                      "top-left",
                      "top-right",
                      "bottom-left",
                      "bottom-right",
                      "hidden"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "lexicon": {
                "maxItems": 200,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                }
              }
            },
            "additionalProperties": false
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "path",
          "brand",
          "revision"
        ],
        "additionalProperties": false
      },
      "BrandResetInput": {
        "$id": "#/components/schemas/BrandResetInput",
        "type": "object",
        "properties": {
          "path": {
            "description": "One field to remove; the whole record when omitted",
            "type": "string",
            "pattern": "^\\/(name|appearance|colors|fonts|mark|footer|counter|frame|positions|lexicon)(\\/[A-Za-z0-9_-]+){0,2}$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "BrandResetOutput": {
        "$id": "#/components/schemas/BrandResetOutput",
        "type": "object",
        "properties": {
          "brand": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "appearance": {
                "type": "string",
                "enum": [
                  "light",
                  "dark"
                ]
              },
              "colors": {
                "type": "object",
                "properties": {
                  "light": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "background": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "caption": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "hint": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "primary": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "accent": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  },
                  "dark": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "background": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "caption": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "hint": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "primary": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      },
                      "accent": {
                        "type": "string",
                        "pattern": "^#[0-9a-fA-F]{6}$"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              "fonts": {
                "type": "object",
                "properties": {
                  "display": {
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  },
                  "text": {
                    "type": "string",
                    "enum": [
                      "inter",
                      "roboto",
                      "open-sans",
                      "lato",
                      "montserrat",
                      "poppins",
                      "source-sans-3",
                      "source-serif-4",
                      "merriweather",
                      "playfair-display",
                      "lora",
                      "pt-serif",
                      "libre-baskerville",
                      "eb-garamond",
                      "nunito",
                      "raleway",
                      "work-sans",
                      "dm-sans",
                      "space-grotesk",
                      "oswald",
                      "bebas-neue",
                      "roboto-mono",
                      "jetbrains-mono",
                      "ibm-plex-sans",
                      "ibm-plex-mono",
                      "fira-code",
                      "geist",
                      "geist-mono",
                      "instrument-sans",
                      "manrope",
                      "bricolage-grotesque",
                      "schibsted-grotesk",
                      "newsreader",
                      "fraunces"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "mark": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "default",
                      "none",
                      "picture"
                    ]
                  },
                  "assetId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "box": {
                    "type": "object",
                    "properties": {
                      "w": {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 1600
                      },
                      "h": {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 900
                      }
                    },
                    "required": [
                      "w",
                      "h"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "kind"
                ],
                "additionalProperties": false
              },
              "footer": {
                "type": "object",
                "properties": {
                  "logo": {
                    "type": "string",
                    "enum": [
                      "default",
                      "none",
                      "picture"
                    ]
                  },
                  "assetId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "text": {
                    "type": "string",
                    "maxLength": 200
                  }
                },
                "additionalProperties": false
              },
              "counter": {
                "type": "object",
                "properties": {
                  "show": {
                    "type": "boolean"
                  },
                  "format": {
                    "type": "string",
                    "enum": [
                      "n / N",
                      "n",
                      "Slide n"
                    ]
                  },
                  "skipTitle": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "frame": {
                "type": "object",
                "properties": {
                  "rails": {
                    "type": "boolean"
                  },
                  "rules": {
                    "type": "boolean"
                  },
                  "crosses": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "positions": {
                "type": "object",
                "properties": {
                  "mark": {
                    "type": "string",
                    "enum": [
                      "top-left",
                      "top-right",
                      "bottom-left",
                      "bottom-right",
                      "hidden"
                    ]
                  },
                  "footerLogo": {
                    "type": "string",
                    "enum": [
                      "top-left",
                      "top-right",
                      "bottom-left",
                      "bottom-right",
                      "hidden"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "lexicon": {
                "maxItems": 200,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 120
                }
              }
            },
            "additionalProperties": false
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "changed": {
            "type": "boolean"
          }
        },
        "required": [
          "brand",
          "revision",
          "changed"
        ],
        "additionalProperties": false
      },
      "FontListOutput": {
        "$id": "#/components/schemas/FontListOutput",
        "type": "object",
        "properties": {
          "fonts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "enum": [
                    "inter",
                    "roboto",
                    "open-sans",
                    "lato",
                    "montserrat",
                    "poppins",
                    "source-sans-3",
                    "source-serif-4",
                    "merriweather",
                    "playfair-display",
                    "lora",
                    "pt-serif",
                    "libre-baskerville",
                    "eb-garamond",
                    "nunito",
                    "raleway",
                    "work-sans",
                    "dm-sans",
                    "space-grotesk",
                    "oswald",
                    "bebas-neue",
                    "roboto-mono",
                    "jetbrains-mono",
                    "ibm-plex-sans",
                    "ibm-plex-mono",
                    "fira-code",
                    "geist",
                    "geist-mono",
                    "instrument-sans",
                    "manrope",
                    "bricolage-grotesque",
                    "schibsted-grotesk",
                    "newsreader",
                    "fraunces"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "category": {
                  "type": "string",
                  "enum": [
                    "sans",
                    "serif",
                    "display",
                    "mono"
                  ]
                },
                "weights": {
                  "minItems": 1,
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "minimum": 100,
                    "maximum": 900
                  }
                },
                "italic": {
                  "type": "boolean"
                },
                "licence": {
                  "type": "string",
                  "enum": [
                    "OFL 1.1",
                    "Apache 2.0"
                  ]
                }
              },
              "required": [
                "id",
                "name",
                "category",
                "weights",
                "italic",
                "licence"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "fonts"
        ],
        "additionalProperties": false
      },
      "LogoSearchInput": {
        "$id": "#/components/schemas/LogoSearchInput",
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "A company name, a slug, an alias or a category"
          },
          "limit": {
            "description": "Defaults to 20",
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "kind": {
            "description": "wordmark lists the marks that have a wordmark of some kind",
            "type": "string",
            "enum": [
              "symbol",
              "wordmark"
            ]
          },
          "collection": {
            "description": "brands (the default) is the brand and community marks; all adds the cloud service icons and the auth badges",
            "type": "string",
            "enum": [
              "brands",
              "all"
            ]
          },
          "since": {
            "description": "A refresh’s builtAt: the answer comes from an index at least as new when the store holds one",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "LogoSearchOutput": {
        "$id": "#/components/schemas/LogoSearchOutput",
        "type": "object",
        "properties": {
          "logos": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slug": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                },
                "title": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                },
                "aliases": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "hex": {
                  "type": "string"
                },
                "variants": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "license": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "guidelines": {
                  "type": "string"
                },
                "collection": {
                  "type": "string"
                },
                "dateAdded": {
                  "type": "string"
                },
                "readsOnPaper": {
                  "type": "boolean"
                },
                "readsOnInk": {
                  "type": "boolean"
                },
                "unavailable": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "type": "object",
                    "properties": {
                      "at": {
                        "type": "string"
                      },
                      "status": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "reason": {
                        "type": "string",
                        "enum": [
                          "missing",
                          "broken",
                          "sanitized",
                          "gradient"
                        ]
                      }
                    },
                    "required": [
                      "at"
                    ],
                    "additionalProperties": false
                  }
                },
                "licenceSentence": {
                  "type": "string"
                }
              },
              "required": [
                "slug",
                "title",
                "aliases",
                "categories",
                "variants",
                "license",
                "collection",
                "licenceSentence"
              ],
              "additionalProperties": false
            }
          },
          "updatedAt": {
            "description": "The time of the last complete index build",
            "type": [
              "string",
              "null"
            ]
          },
          "lastError": {
            "type": "object",
            "properties": {
              "at": {
                "type": "string"
              },
              "status": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "at",
              "message"
            ],
            "additionalProperties": false
          },
          "progress": {
            "type": "object",
            "properties": {
              "done": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "done",
              "total"
            ],
            "additionalProperties": false
          },
          "source": {
            "type": "string",
            "const": "thesvg.org"
          },
          "indexed": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The marks the index holds in the collections searched"
          }
        },
        "required": [
          "logos",
          "updatedAt",
          "source",
          "indexed"
        ],
        "additionalProperties": false
      },
      "LogoInsertInput": {
        "$id": "#/components/schemas/LogoInsertInput",
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "The mark’s slug on thesvg.org"
          },
          "variant": {
            "description": "default, mono, light, dark, wordmark, wordmarkLight or wordmarkDark; the appearance rule chooses when absent",
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          },
          "slideId": {
            "description": "The slide the picture lands on; none stores the asset alone",
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "box": {
            "description": "The box in sheet px; the logo size in the free area of the body slot when absent",
            "type": "object",
            "properties": {
              "x": {
                "type": "number"
              },
              "y": {
                "type": "number"
              },
              "w": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "h": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "x",
              "y",
              "w",
              "h"
            ],
            "additionalProperties": false
          },
          "everySlide": {
            "description": "Use as this presentation’s logo on every slide: the kit’s mark and footer slots take the asset",
            "type": "boolean"
          },
          "kit": {
            "description": "The brand kit’s logo slots alone, for the Brand kit panel",
            "type": "boolean"
          },
          "blockId": {
            "description": "Replace image: the picture whose asset is swapped",
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slug",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "LogoInsertOutput": {
        "$id": "#/components/schemas/LogoInsertOutput",
        "type": "object",
        "properties": {
          "asset": {
            "$ref": "#/components/schemas/Asset"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "variant": {
            "type": "string",
            "description": "The variant the insert took"
          }
        },
        "required": [
          "asset",
          "revision",
          "variant"
        ],
        "additionalProperties": false
      },
      "LogoRefreshInput": {
        "$id": "#/components/schemas/LogoRefreshInput",
        "type": "object",
        "properties": {
          "dryRun": {
            "description": "The counts alone, no fetch and no write",
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "LogoRefreshOutput": {
        "$id": "#/components/schemas/LogoRefreshOutput",
        "type": "object",
        "properties": {
          "icons": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "brands": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "cachedMarks": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "unavailable": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "builtAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "lastError": {
            "type": "object",
            "properties": {
              "at": {
                "type": "string"
              },
              "status": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "at",
              "message"
            ],
            "additionalProperties": false
          },
          "progress": {
            "type": "object",
            "properties": {
              "done": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "done",
              "total"
            ],
            "additionalProperties": false
          },
          "fetched": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "dropped": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "dryRun": {
            "type": "boolean"
          },
          "upstream": {
            "type": "string",
            "enum": [
              "network",
              "fixture",
              "down"
            ]
          }
        },
        "required": [
          "icons",
          "brands",
          "cachedMarks",
          "unavailable",
          "updatedAt",
          "builtAt",
          "fetched",
          "dropped",
          "dryRun",
          "upstream"
        ],
        "additionalProperties": false
      },
      "ShaderListInput": {
        "$id": "#/components/schemas/ShaderListInput",
        "type": "object",
        "properties": {
          "materialId": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ShaderListOutput": {
        "$id": "#/components/schemas/ShaderListOutput",
        "type": "object",
        "properties": {
          "shaders": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1
                },
                "family": {
                  "type": "string",
                  "enum": [
                    "paper",
                    "proto"
                  ]
                },
                "label": {
                  "type": "string"
                },
                "doc": {
                  "type": "string"
                },
                "available": {
                  "type": "boolean"
                },
                "credit": {
                  "type": "string"
                },
                "license": {
                  "type": "string"
                },
                "uniforms": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1
                      },
                      "label": {
                        "type": "string"
                      },
                      "kind": {
                        "type": "string",
                        "enum": [
                          "float",
                          "int",
                          "color",
                          "colors",
                          "enum",
                          "bool"
                        ]
                      },
                      "default": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "array",
                            "items": {
                              "type": "number"
                            }
                          },
                          {
                            "type": "string"
                          }
                        ]
                      },
                      "min": {
                        "type": "number"
                      },
                      "max": {
                        "type": "number"
                      },
                      "step": {
                        "type": "number"
                      },
                      "options": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string"
                            },
                            "value": {
                              "type": "number"
                            }
                          },
                          "required": [
                            "name",
                            "value"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "maxCount": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "help": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "label",
                      "kind",
                      "default"
                    ],
                    "additionalProperties": false
                  }
                },
                "presets": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1
                      },
                      "label": {
                        "type": "string"
                      },
                      "doc": {
                        "type": "string"
                      },
                      "uniforms": {
                        "type": "object",
                        "propertyNames": {
                          "type": "string"
                        },
                        "additionalProperties": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "array",
                              "items": {
                                "type": "number"
                              }
                            },
                            {
                              "type": "string"
                            }
                          ]
                        }
                      }
                    },
                    "required": [
                      "name",
                      "label",
                      "doc",
                      "uniforms"
                    ],
                    "additionalProperties": false
                  }
                },
                "category": {
                  "type": "string",
                  "enum": [
                    "fluid",
                    "light",
                    "metal",
                    "gradient",
                    "graphic"
                  ]
                },
                "still": {
                  "type": "boolean"
                },
                "featuredPreset": {
                  "type": "string"
                },
                "preview": {
                  "type": "string"
                },
                "presetPreviews": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "id",
                "family",
                "label",
                "doc",
                "available",
                "credit",
                "license",
                "uniforms",
                "presets",
                "category",
                "still",
                "preview",
                "presetPreviews"
              ],
              "additionalProperties": false
            }
          },
          "controls": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "enum": [
                    "strength",
                    "detail",
                    "frequency",
                    "amplitude",
                    "density",
                    "brightness",
                    "grain",
                    "rotation",
                    "centerX",
                    "centerY",
                    "speed"
                  ]
                },
                "label": {
                  "type": "string"
                },
                "sentence": {
                  "type": "string"
                },
                "group": {
                  "type": "string",
                  "enum": [
                    "Form",
                    "Light and texture",
                    "Orientation",
                    "Motion"
                  ]
                },
                "default": {
                  "type": "number"
                },
                "min": {
                  "type": "number"
                },
                "max": {
                  "type": "number"
                },
                "step": {
                  "type": "number"
                }
              },
              "required": [
                "name",
                "label",
                "sentence",
                "group",
                "default",
                "min",
                "max",
                "step"
              ],
              "additionalProperties": false
            }
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "label"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "shaders",
          "controls",
          "categories"
        ],
        "additionalProperties": false
      },
      "ShaderInsertInput": {
        "$id": "#/components/schemas/ShaderInsertInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "materialId": {
            "type": "string",
            "minLength": 1,
            "description": "A catalog id from shader.list (paper:liquid-metal)"
          },
          "preset": {
            "description": "A preset of the entry; its featured one when absent",
            "type": "string"
          },
          "controls": {
            "type": "object",
            "properties": {
              "strength": {
                "type": "number",
                "minimum": 0,
                "maximum": 2
              },
              "detail": {
                "type": "number",
                "minimum": 0.5,
                "maximum": 8
              },
              "frequency": {
                "type": "number",
                "minimum": 0.2,
                "maximum": 10
              },
              "amplitude": {
                "type": "number",
                "minimum": 0,
                "maximum": 8
              },
              "density": {
                "type": "number",
                "minimum": 0.1,
                "maximum": 2
              },
              "brightness": {
                "type": "number",
                "minimum": 0.1,
                "maximum": 2
              },
              "grain": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "rotation": {
                "type": "number",
                "minimum": 0,
                "maximum": 360
              },
              "centerX": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "centerY": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "speed": {
                "type": "number",
                "minimum": 0,
                "maximum": 2
              }
            },
            "additionalProperties": false
          },
          "at": {
            "description": "The box in sheet px; the free rectangle when absent",
            "type": "object",
            "properties": {
              "x": {
                "type": "number",
                "title": "X",
                "x-inspector": {
                  "label": "X",
                  "control": "number",
                  "group": "Layout"
                }
              },
              "y": {
                "type": "number",
                "title": "Y",
                "x-inspector": {
                  "label": "Y",
                  "control": "number",
                  "group": "Layout"
                }
              },
              "w": {
                "type": "number",
                "exclusiveMinimum": 0,
                "title": "Width",
                "x-inspector": {
                  "label": "Width",
                  "control": "number",
                  "group": "Layout"
                }
              },
              "h": {
                "type": "number",
                "exclusiveMinimum": 0,
                "title": "Height",
                "x-inspector": {
                  "label": "Height",
                  "control": "number",
                  "group": "Layout"
                }
              },
              "z": {
                "title": "Z order",
                "x-inspector": {
                  "label": "Z order",
                  "control": "number",
                  "group": "Layout",
                  "help": "Higher draws over lower; block.order moves a block through the stack."
                },
                "description": "Higher draws over lower; block.order moves a block through the stack.",
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "rotate": {
                "title": "Rotate",
                "x-inspector": {
                  "label": "Rotate",
                  "control": "number",
                  "snap": [
                    0,
                    15,
                    30,
                    45,
                    90,
                    180,
                    270
                  ],
                  "group": "Layout",
                  "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                },
                "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                "type": "number",
                "minimum": 0,
                "exclusiveMaximum": 360
              },
              "flip": {
                "title": "Flip",
                "x-inspector": {
                  "label": "Flip",
                  "control": "select",
                  "snap": [
                    "h",
                    "v",
                    "hv"
                  ],
                  "group": "Layout",
                  "help": "h mirrors left to right, v top to bottom, hv both."
                },
                "description": "h mirrors left to right, v top to bottom, hv both.",
                "type": "string",
                "enum": [
                  "h",
                  "v",
                  "hv"
                ]
              },
              "group": {
                "title": "Group",
                "x-inspector": {
                  "label": "Group",
                  "control": "readonly",
                  "group": "Layout",
                  "help": "The tag the members of one group share; Group and Ungroup write it."
                },
                "description": "The tag the members of one group share; Group and Ungroup write it.",
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              }
            },
            "required": [
              "x",
              "y",
              "w",
              "h"
            ],
            "additionalProperties": false
          },
          "alt": {
            "type": "string"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "materialId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShaderInsertOutput": {
        "$id": "#/components/schemas/ShaderInsertOutput",
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "block": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "type": {
                "type": "string",
                "const": "material"
              },
              "materialId": {
                "type": "string",
                "minLength": 1,
                "title": "Material",
                "x-inspector": {
                  "label": "Material",
                  "control": "select",
                  "group": "Block",
                  "help": "A catalog id from `turboslide material list` (paper:liquid-metal, paper:gem-smoke)."
                },
                "description": "A catalog id from `turboslide material list` (paper:liquid-metal, paper:gem-smoke)."
              },
              "preset": {
                "title": "Preset",
                "x-inspector": {
                  "label": "Preset",
                  "control": "select",
                  "group": "Block",
                  "help": "A palette preset of the material (ink-paper, paper-ink, brand-blue, fire); uniforms override it."
                },
                "description": "A palette preset of the material (ink-paper, paper-ink, brand-blue, fire); uniforms override it.",
                "type": "string",
                "minLength": 1
              },
              "uniforms": {
                "title": "Uniforms",
                "x-inspector": {
                  "label": "Uniforms",
                  "control": "json",
                  "group": "Block",
                  "help": "Uniform overrides in the recipe’s u_* names; the Material section edits them one by one."
                },
                "description": "Uniform overrides in the recipe’s u_* names; the Material section edits them one by one.",
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "array",
                      "items": {
                        "type": "number"
                      }
                    },
                    {
                      "type": "string"
                    }
                  ]
                }
              },
              "anchor": {
                "title": "Anchor (ms)",
                "x-inspector": {
                  "label": "Anchor (ms)",
                  "control": "number",
                  "snap": [
                    4000,
                    5500,
                    7000
                  ],
                  "group": "Block",
                  "help": "The frame time the capture freezes; the deck sampled its openers at about 4, 5.5 and 7 s."
                },
                "description": "The frame time the capture freezes; the deck sampled its openers at about 4, 5.5 and 7 s.",
                "type": "number",
                "minimum": 0
              },
              "twoTone": {
                "title": "Two-tone",
                "x-inspector": {
                  "label": "Two-tone",
                  "control": "toggle",
                  "group": "Block",
                  "help": "Capture through the deck’s 8 by 8 Bayer screen as a light and dark twin pair (SPEC 5.4)."
                },
                "description": "Capture through the deck’s 8 by 8 Bayer screen as a light and dark twin pair (SPEC 5.4).",
                "type": "boolean"
              },
              "plate": {
                "title": "Plate",
                "x-inspector": {
                  "label": "Plate",
                  "control": "select",
                  "snap": [
                    "lower-left",
                    "lower-right",
                    "upper-left"
                  ],
                  "group": "Block",
                  "help": "The plate rectangle the two-tone metrics are screened against (OPENERS.md:105, 176)."
                },
                "description": "The plate rectangle the two-tone metrics are screened against (OPENERS.md:105, 176).",
                "type": "string",
                "enum": [
                  "lower-left",
                  "lower-right",
                  "upper-left"
                ]
              },
              "asset": {
                "title": "Frame",
                "x-inspector": {
                  "label": "Frame",
                  "control": "asset",
                  "group": "Asset"
                },
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "motion": {
                "title": "Motion",
                "x-inspector": {
                  "label": "Motion",
                  "control": "json",
                  "group": "Block",
                  "help": "Whether the show plays the shader (play: off or show) and at what speed; every still surface draws the frame."
                },
                "description": "Whether the show plays the shader (play: off or show) and at what speed; every still surface draws the frame.",
                "type": "object",
                "properties": {
                  "play": {
                    "type": "string",
                    "enum": [
                      "off",
                      "show"
                    ]
                  },
                  "speed": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 2
                  }
                },
                "required": [
                  "play"
                ],
                "additionalProperties": false
              },
              "controls": {
                "title": "Controls",
                "x-inspector": {
                  "label": "Controls",
                  "control": "json",
                  "group": "Block",
                  "help": "The Shader section’s common controls (strength, detail, frequency, amplitude, density, brightness, grain, rotation, centerX, centerY, speed); the resolved uniforms sit beside them."
                },
                "description": "The Shader section’s common controls (strength, detail, frequency, amplitude, density, brightness, grain, rotation, centerX, centerY, speed); the resolved uniforms sit beside them.",
                "type": "object",
                "properties": {
                  "strength": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 2
                  },
                  "detail": {
                    "type": "number",
                    "minimum": 0.5,
                    "maximum": 8
                  },
                  "frequency": {
                    "type": "number",
                    "minimum": 0.2,
                    "maximum": 10
                  },
                  "amplitude": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 8
                  },
                  "density": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 2
                  },
                  "brightness": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 2
                  },
                  "grain": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "rotation": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "centerX": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "centerY": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "speed": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 2
                  }
                },
                "additionalProperties": false
              },
              "palette": {
                "title": "Palette",
                "x-inspector": {
                  "label": "Palette",
                  "control": "select",
                  "snap": [
                    "kit",
                    "custom"
                  ],
                  "group": "Block",
                  "help": "kit draws the brand kit’s six roles; custom records a deck that left the kit."
                },
                "description": "kit draws the brand kit’s six roles; custom records a deck that left the kit.",
                "type": "string",
                "enum": [
                  "kit",
                  "custom"
                ]
              },
              "height": {
                "title": "Height",
                "x-inspector": {
                  "label": "Height",
                  "control": "number",
                  "group": "Layout"
                },
                "type": "number",
                "exclusiveMinimum": 0
              },
              "caption": {
                "title": "Caption",
                "x-inspector": {
                  "label": "Caption",
                  "control": "textarea",
                  "group": "Text"
                },
                "type": "string"
              },
              "captionSize": {
                "title": "Caption size",
                "x-inspector": {
                  "label": "Caption size",
                  "control": "select",
                  "snap": [
                    16,
                    15
                  ],
                  "group": "Block"
                },
                "type": "number",
                "enum": [
                  16,
                  15
                ]
              },
              "alt": {
                "type": "string",
                "minLength": 1,
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "text",
                  "group": "Text"
                }
              }
            },
            "required": [
              "id",
              "type",
              "materialId",
              "alt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "revision",
          "slideId",
          "blockId",
          "block"
        ],
        "additionalProperties": false
      },
      "ShaderSetInput": {
        "$id": "#/components/schemas/ShaderSetInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "path": {
            "type": "string",
            "pattern": "^\\/(preset|controls(\\/[a-zA-Z]+)?|uniforms(\\/[a-zA-Z_]+)?|anchor|motion|twoTone|plate|palette|alt|caption|captionSize|height)$",
            "description": "A JSON pointer under the block"
          },
          "value": {
            "description": "Absent removes the field"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "path",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShaderSetOutput": {
        "$id": "#/components/schemas/ShaderSetOutput",
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "block": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9][a-z0-9-]*$",
                "title": "Id",
                "x-inspector": {
                  "label": "Id",
                  "control": "readonly",
                  "group": "Advanced"
                }
              },
              "ext": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "pos": {
                "title": "Position",
                "x-inspector": {
                  "label": "Position",
                  "control": "position",
                  "group": "Layout",
                  "help": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md)."
                },
                "description": "The box on the 1600 by 900 sheet in px; required under the freeform layout and in the objects layer, forbidden elsewhere (docs/freeform.md).",
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "title": "X",
                    "x-inspector": {
                      "label": "X",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "y": {
                    "type": "number",
                    "title": "Y",
                    "x-inspector": {
                      "label": "Y",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "w": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Width",
                    "x-inspector": {
                      "label": "Width",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "h": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "title": "Height",
                    "x-inspector": {
                      "label": "Height",
                      "control": "number",
                      "group": "Layout"
                    }
                  },
                  "z": {
                    "title": "Z order",
                    "x-inspector": {
                      "label": "Z order",
                      "control": "number",
                      "group": "Layout",
                      "help": "Higher draws over lower; block.order moves a block through the stack."
                    },
                    "description": "Higher draws over lower; block.order moves a block through the stack.",
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "rotate": {
                    "title": "Rotate",
                    "x-inspector": {
                      "label": "Rotate",
                      "control": "number",
                      "snap": [
                        0,
                        15,
                        30,
                        45,
                        90,
                        180,
                        270
                      ],
                      "group": "Layout",
                      "help": "Degrees clockwise about the centre of the box, 0 up to 360."
                    },
                    "description": "Degrees clockwise about the centre of the box, 0 up to 360.",
                    "type": "number",
                    "minimum": 0,
                    "exclusiveMaximum": 360
                  },
                  "flip": {
                    "title": "Flip",
                    "x-inspector": {
                      "label": "Flip",
                      "control": "select",
                      "snap": [
                        "h",
                        "v",
                        "hv"
                      ],
                      "group": "Layout",
                      "help": "h mirrors left to right, v top to bottom, hv both."
                    },
                    "description": "h mirrors left to right, v top to bottom, hv both.",
                    "type": "string",
                    "enum": [
                      "h",
                      "v",
                      "hv"
                    ]
                  },
                  "group": {
                    "title": "Group",
                    "x-inspector": {
                      "label": "Group",
                      "control": "readonly",
                      "group": "Layout",
                      "help": "The tag the members of one group share; Group and Ungroup write it."
                    },
                    "description": "The tag the members of one group share; Group and Ungroup write it.",
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "w",
                  "h"
                ],
                "additionalProperties": false
              },
              "link": {
                "title": "Link",
                "x-inspector": {
                  "label": "Link",
                  "control": "json",
                  "group": "Block",
                  "help": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads."
                },
                "description": "A URL, or { \"slide\": \"<id>\" | \"next\" | \"previous\" | \"first\" | \"last\" }; active when presenting, in the shared view and in the downloads.",
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "object",
                    "properties": {
                      "slide": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "next",
                              "previous",
                              "first",
                              "last"
                            ]
                          }
                        ]
                      }
                    },
                    "required": [
                      "slide"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "type": {
                "type": "string",
                "const": "material"
              },
              "materialId": {
                "type": "string",
                "minLength": 1,
                "title": "Material",
                "x-inspector": {
                  "label": "Material",
                  "control": "select",
                  "group": "Block",
                  "help": "A catalog id from `turboslide material list` (paper:liquid-metal, paper:gem-smoke)."
                },
                "description": "A catalog id from `turboslide material list` (paper:liquid-metal, paper:gem-smoke)."
              },
              "preset": {
                "title": "Preset",
                "x-inspector": {
                  "label": "Preset",
                  "control": "select",
                  "group": "Block",
                  "help": "A palette preset of the material (ink-paper, paper-ink, brand-blue, fire); uniforms override it."
                },
                "description": "A palette preset of the material (ink-paper, paper-ink, brand-blue, fire); uniforms override it.",
                "type": "string",
                "minLength": 1
              },
              "uniforms": {
                "title": "Uniforms",
                "x-inspector": {
                  "label": "Uniforms",
                  "control": "json",
                  "group": "Block",
                  "help": "Uniform overrides in the recipe’s u_* names; the Material section edits them one by one."
                },
                "description": "Uniform overrides in the recipe’s u_* names; the Material section edits them one by one.",
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "array",
                      "items": {
                        "type": "number"
                      }
                    },
                    {
                      "type": "string"
                    }
                  ]
                }
              },
              "anchor": {
                "title": "Anchor (ms)",
                "x-inspector": {
                  "label": "Anchor (ms)",
                  "control": "number",
                  "snap": [
                    4000,
                    5500,
                    7000
                  ],
                  "group": "Block",
                  "help": "The frame time the capture freezes; the deck sampled its openers at about 4, 5.5 and 7 s."
                },
                "description": "The frame time the capture freezes; the deck sampled its openers at about 4, 5.5 and 7 s.",
                "type": "number",
                "minimum": 0
              },
              "twoTone": {
                "title": "Two-tone",
                "x-inspector": {
                  "label": "Two-tone",
                  "control": "toggle",
                  "group": "Block",
                  "help": "Capture through the deck’s 8 by 8 Bayer screen as a light and dark twin pair (SPEC 5.4)."
                },
                "description": "Capture through the deck’s 8 by 8 Bayer screen as a light and dark twin pair (SPEC 5.4).",
                "type": "boolean"
              },
              "plate": {
                "title": "Plate",
                "x-inspector": {
                  "label": "Plate",
                  "control": "select",
                  "snap": [
                    "lower-left",
                    "lower-right",
                    "upper-left"
                  ],
                  "group": "Block",
                  "help": "The plate rectangle the two-tone metrics are screened against (OPENERS.md:105, 176)."
                },
                "description": "The plate rectangle the two-tone metrics are screened against (OPENERS.md:105, 176).",
                "type": "string",
                "enum": [
                  "lower-left",
                  "lower-right",
                  "upper-left"
                ]
              },
              "asset": {
                "title": "Frame",
                "x-inspector": {
                  "label": "Frame",
                  "control": "asset",
                  "group": "Asset"
                },
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "motion": {
                "title": "Motion",
                "x-inspector": {
                  "label": "Motion",
                  "control": "json",
                  "group": "Block",
                  "help": "Whether the show plays the shader (play: off or show) and at what speed; every still surface draws the frame."
                },
                "description": "Whether the show plays the shader (play: off or show) and at what speed; every still surface draws the frame.",
                "type": "object",
                "properties": {
                  "play": {
                    "type": "string",
                    "enum": [
                      "off",
                      "show"
                    ]
                  },
                  "speed": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 2
                  }
                },
                "required": [
                  "play"
                ],
                "additionalProperties": false
              },
              "controls": {
                "title": "Controls",
                "x-inspector": {
                  "label": "Controls",
                  "control": "json",
                  "group": "Block",
                  "help": "The Shader section’s common controls (strength, detail, frequency, amplitude, density, brightness, grain, rotation, centerX, centerY, speed); the resolved uniforms sit beside them."
                },
                "description": "The Shader section’s common controls (strength, detail, frequency, amplitude, density, brightness, grain, rotation, centerX, centerY, speed); the resolved uniforms sit beside them.",
                "type": "object",
                "properties": {
                  "strength": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 2
                  },
                  "detail": {
                    "type": "number",
                    "minimum": 0.5,
                    "maximum": 8
                  },
                  "frequency": {
                    "type": "number",
                    "minimum": 0.2,
                    "maximum": 10
                  },
                  "amplitude": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 8
                  },
                  "density": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 2
                  },
                  "brightness": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 2
                  },
                  "grain": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "rotation": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 360
                  },
                  "centerX": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "centerY": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "speed": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 2
                  }
                },
                "additionalProperties": false
              },
              "palette": {
                "title": "Palette",
                "x-inspector": {
                  "label": "Palette",
                  "control": "select",
                  "snap": [
                    "kit",
                    "custom"
                  ],
                  "group": "Block",
                  "help": "kit draws the brand kit’s six roles; custom records a deck that left the kit."
                },
                "description": "kit draws the brand kit’s six roles; custom records a deck that left the kit.",
                "type": "string",
                "enum": [
                  "kit",
                  "custom"
                ]
              },
              "height": {
                "title": "Height",
                "x-inspector": {
                  "label": "Height",
                  "control": "number",
                  "group": "Layout"
                },
                "type": "number",
                "exclusiveMinimum": 0
              },
              "caption": {
                "title": "Caption",
                "x-inspector": {
                  "label": "Caption",
                  "control": "textarea",
                  "group": "Text"
                },
                "type": "string"
              },
              "captionSize": {
                "title": "Caption size",
                "x-inspector": {
                  "label": "Caption size",
                  "control": "select",
                  "snap": [
                    16,
                    15
                  ],
                  "group": "Block"
                },
                "type": "number",
                "enum": [
                  16,
                  15
                ]
              },
              "alt": {
                "type": "string",
                "minLength": 1,
                "title": "Alt text",
                "x-inspector": {
                  "label": "Alt text",
                  "control": "text",
                  "group": "Text"
                }
              }
            },
            "required": [
              "id",
              "type",
              "materialId",
              "alt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "revision",
          "block"
        ],
        "additionalProperties": false
      },
      "ShaderFrameInput": {
        "$id": "#/components/schemas/ShaderFrameInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "frameKey": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$"
          },
          "bytes": {
            "description": "The PNG, or the WebP the editor sends for a PNG over the function's cap, as base64",
            "type": "string"
          },
          "upload": {
            "description": "A presigned upload’s key instead of bytes (a frame over the body cap)",
            "type": "string"
          },
          "renderer": {
            "description": "The WebGL renderer string of the client",
            "type": "string"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "frameKey",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShaderFrameOutput": {
        "$id": "#/components/schemas/ShaderFrameOutput",
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "assetId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "existed": {
            "type": "boolean"
          },
          "removed": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "size": {
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2
          }
        },
        "required": [
          "revision",
          "assetId",
          "existed",
          "removed",
          "size"
        ],
        "additionalProperties": false
      },
      "ShaderCaptureInput": {
        "$id": "#/components/schemas/ShaderCaptureInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "backend": {
            "type": "string",
            "enum": [
              "angle-metal",
              "swiftshader"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShaderCaptureOutput": {
        "$id": "#/components/schemas/ShaderCaptureOutput",
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "assetId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "existed": {
            "type": "boolean"
          },
          "removed": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "size": {
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2
          }
        },
        "required": [
          "revision",
          "assetId",
          "existed",
          "removed",
          "size"
        ],
        "additionalProperties": false
      },
      "ShaderRenderInput": {
        "$id": "#/components/schemas/ShaderRenderInput",
        "type": "object",
        "properties": {
          "materialId": {
            "type": "string",
            "minLength": 1
          },
          "preset": {
            "type": "string"
          },
          "uniforms": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "number"
                  }
                },
                {
                  "type": "string"
                }
              ]
            }
          },
          "controls": {
            "type": "object",
            "properties": {
              "strength": {
                "type": "number",
                "minimum": 0,
                "maximum": 2
              },
              "detail": {
                "type": "number",
                "minimum": 0.5,
                "maximum": 8
              },
              "frequency": {
                "type": "number",
                "minimum": 0.2,
                "maximum": 10
              },
              "amplitude": {
                "type": "number",
                "minimum": 0,
                "maximum": 8
              },
              "density": {
                "type": "number",
                "minimum": 0.1,
                "maximum": 2
              },
              "brightness": {
                "type": "number",
                "minimum": 0.1,
                "maximum": 2
              },
              "grain": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "rotation": {
                "type": "number",
                "minimum": 0,
                "maximum": 360
              },
              "centerX": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "centerY": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "speed": {
                "type": "number",
                "minimum": 0,
                "maximum": 2
              }
            },
            "additionalProperties": false
          },
          "size": {
            "type": "array",
            "prefixItems": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              }
            ],
            "items": false,
            "minItems": 2,
            "maxItems": 2
          },
          "timeMs": {
            "type": "number",
            "minimum": 0
          },
          "backend": {
            "type": "string",
            "enum": [
              "angle-metal",
              "swiftshader"
            ]
          }
        },
        "required": [
          "materialId"
        ],
        "additionalProperties": false
      },
      "ShaderRenderOutput": {
        "$id": "#/components/schemas/ShaderRenderOutput",
        "type": "object",
        "properties": {
          "png": {
            "type": "string",
            "description": "The PNG as base64"
          },
          "width": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "height": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "renderer": {
            "type": "string"
          },
          "backend": {
            "type": "string",
            "enum": [
              "angle-metal",
              "swiftshader"
            ]
          },
          "ms": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "png",
          "width",
          "height",
          "renderer",
          "backend",
          "ms"
        ],
        "additionalProperties": false
      },
      "AdminAvatarSweepInput": {
        "$id": "#/components/schemas/AdminAvatarSweepInput",
        "type": "object",
        "properties": {
          "dryRun": {
            "description": "List the orphans and remove nothing",
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "AdminAvatarSweepOutput": {
        "$id": "#/components/schemas/AdminAvatarSweepOutput",
        "type": "object",
        "properties": {
          "dryRun": {
            "type": "boolean"
          },
          "scanned": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "kept": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "young": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "orphans": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "filesRemoved": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "dryRun",
          "scanned",
          "kept",
          "young",
          "orphans",
          "filesRemoved"
        ],
        "additionalProperties": false
      },
      "ThemeListOutput": {
        "$id": "#/components/schemas/ThemeListOutput",
        "type": "object",
        "properties": {
          "themes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "enum": [
                    "simple",
                    "general-translation",
                    "swiss",
                    "mint",
                    "coral",
                    "night",
                    "slate",
                    "sand",
                    "signal"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "sentence": {
                  "type": "string"
                },
                "defaultAppearance": {
                  "type": "string",
                  "enum": [
                    "light",
                    "dark"
                  ]
                },
                "tokens": {
                  "type": "object",
                  "properties": {
                    "light": {
                      "type": "object",
                      "propertyNames": {
                        "type": "string"
                      },
                      "additionalProperties": {
                        "type": "string"
                      }
                    },
                    "dark": {
                      "type": "object",
                      "propertyNames": {
                        "type": "string"
                      },
                      "additionalProperties": {
                        "type": "string"
                      }
                    }
                  },
                  "required": [
                    "light",
                    "dark"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "id",
                "name",
                "sentence",
                "defaultAppearance",
                "tokens"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "themes"
        ],
        "additionalProperties": false
      },
      "PresenceListOutput": {
        "$id": "#/components/schemas/PresenceListOutput",
        "type": "object",
        "properties": {
          "deckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "cap": {
            "type": "number",
            "const": 20,
            "description": "Live pointers publish for the first 20 clients by join order"
          },
          "pointersVisible": {
            "type": "boolean"
          },
          "self": {
            "type": "object",
            "properties": {
              "clientId": {
                "type": "string",
                "minLength": 1
              },
              "principalId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "kind": {
                "type": "string",
                "enum": [
                  "human",
                  "agent"
                ]
              },
              "label": {
                "type": "string"
              },
              "trust": {
                "type": "string",
                "enum": [
                  "label",
                  "guest",
                  "verified",
                  "agent"
                ]
              },
              "mark": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {},
                "description": "The computed MarkSpec of @turboslide/identity, the same mark a person sees"
              },
              "role": {
                "type": "string",
                "enum": [
                  "viewer",
                  "commenter",
                  "editor",
                  "owner"
                ]
              },
              "slideId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "selection": {
                "type": "object",
                "properties": {
                  "blockIds": {
                    "maxItems": 64,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "pattern": "^[a-z0-9][a-z0-9-]*$"
                    }
                  },
                  "caret": {
                    "type": "object",
                    "properties": {
                      "blockId": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "path": {
                        "type": "string"
                      },
                      "range": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        ],
                        "items": false,
                        "minItems": 2,
                        "maxItems": 2
                      }
                    },
                    "required": [
                      "blockId",
                      "path",
                      "range"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "blockIds"
                ],
                "additionalProperties": false
              },
              "pointer": {
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number"
                  },
                  "y": {
                    "type": "number"
                  }
                },
                "required": [
                  "x",
                  "y"
                ],
                "additionalProperties": false
              },
              "following": {
                "description": "The clientId this participant follows",
                "type": "string"
              },
              "presenting": {
                "type": "boolean"
              },
              "idle": {
                "type": "boolean"
              },
              "lastSeenAt": {
                "type": "string"
              }
            },
            "required": [
              "clientId",
              "principalId",
              "kind",
              "label",
              "trust",
              "mark",
              "presenting",
              "idle",
              "lastSeenAt"
            ],
            "additionalProperties": false
          },
          "others": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "clientId": {
                  "type": "string",
                  "minLength": 1
                },
                "principalId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "human",
                    "agent"
                  ]
                },
                "label": {
                  "type": "string"
                },
                "trust": {
                  "type": "string",
                  "enum": [
                    "label",
                    "guest",
                    "verified",
                    "agent"
                  ]
                },
                "mark": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {},
                  "description": "The computed MarkSpec of @turboslide/identity, the same mark a person sees"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "viewer",
                    "commenter",
                    "editor",
                    "owner"
                  ]
                },
                "slideId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "selection": {
                  "type": "object",
                  "properties": {
                    "blockIds": {
                      "maxItems": 64,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      }
                    },
                    "caret": {
                      "type": "object",
                      "properties": {
                        "blockId": {
                          "type": "string",
                          "pattern": "^[a-z0-9][a-z0-9-]*$"
                        },
                        "path": {
                          "type": "string"
                        },
                        "range": {
                          "type": "array",
                          "prefixItems": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          ],
                          "items": false,
                          "minItems": 2,
                          "maxItems": 2
                        }
                      },
                      "required": [
                        "blockId",
                        "path",
                        "range"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "blockIds"
                  ],
                  "additionalProperties": false
                },
                "pointer": {
                  "type": "object",
                  "properties": {
                    "x": {
                      "type": "number"
                    },
                    "y": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "x",
                    "y"
                  ],
                  "additionalProperties": false
                },
                "following": {
                  "description": "The clientId this participant follows",
                  "type": "string"
                },
                "presenting": {
                  "type": "boolean"
                },
                "idle": {
                  "type": "boolean"
                },
                "lastSeenAt": {
                  "type": "string"
                }
              },
              "required": [
                "clientId",
                "principalId",
                "kind",
                "label",
                "trust",
                "mark",
                "presenting",
                "idle",
                "lastSeenAt"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "deckId",
          "cap",
          "pointersVisible",
          "self",
          "others"
        ],
        "additionalProperties": false
      },
      "PresenceFollowInput": {
        "$id": "#/components/schemas/PresenceFollowInput",
        "type": "object",
        "properties": {
          "clientId": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "clientId"
        ],
        "additionalProperties": false
      },
      "PresenceFollowOutput": {
        "$id": "#/components/schemas/PresenceFollowOutput",
        "type": "object",
        "properties": {
          "following": {
            "type": [
              "string",
              "null"
            ]
          },
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "following"
        ],
        "additionalProperties": false
      },
      "PresenceUnfollowOutput": {
        "$id": "#/components/schemas/PresenceUnfollowOutput",
        "type": "object",
        "properties": {
          "following": {
            "type": "null"
          }
        },
        "required": [
          "following"
        ],
        "additionalProperties": false
      },
      "PresencePointerInput": {
        "$id": "#/components/schemas/PresencePointerInput",
        "type": "object",
        "properties": {
          "on": {
            "type": "boolean"
          }
        },
        "required": [
          "on"
        ],
        "additionalProperties": false
      },
      "PresencePointerOutput": {
        "$id": "#/components/schemas/PresencePointerOutput",
        "type": "object",
        "properties": {
          "on": {
            "type": "boolean"
          }
        },
        "required": [
          "on"
        ],
        "additionalProperties": false
      },
      "SyncStatusOutput": {
        "$id": "#/components/schemas/SyncStatusOutput",
        "type": "object",
        "properties": {
          "seq": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The last stream entry this client saw"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "pending": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Sent or about to be sent, not in the stream"
          },
          "retained": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "In the stream, not yet in a checkpoint"
          },
          "tier": {
            "type": "string",
            "enum": [
              "memory",
              "redis",
              "blob",
              "do"
            ]
          },
          "transport": {
            "type": "string",
            "enum": [
              "sse",
              "poll",
              "file",
              "ws"
            ]
          },
          "connected": {
            "type": "boolean"
          },
          "storeCalls": {
            "type": "object",
            "properties": {
              "head": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "get": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "put": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "list": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "del": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "windowMs": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "instance": {
                "type": "string",
                "pattern": "^[0-9a-f]{8}$"
              },
              "lists": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              }
            },
            "required": [
              "head",
              "get",
              "put",
              "list",
              "del",
              "windowMs",
              "instance"
            ],
            "additionalProperties": false
          },
          "room": {
            "type": "object",
            "properties": {
              "colo": {
                "type": "string"
              },
              "object": {
                "type": "string"
              },
              "idleMs": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "maxMs": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "colo",
              "object",
              "idleMs",
              "maxMs"
            ],
            "additionalProperties": false
          },
          "colo": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "seq",
          "revision",
          "pending",
          "retained",
          "tier",
          "transport",
          "connected"
        ],
        "additionalProperties": false
      },
      "DeckWatchInput": {
        "$id": "#/components/schemas/DeckWatchInput",
        "type": "object",
        "properties": {
          "since": {
            "description": "The revision the caller holds; the current one when absent",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "timeoutMs": {
            "description": "How long to wait for a change; 25,000 unless set",
            "type": "integer",
            "minimum": 0,
            "maximum": 30000
          }
        },
        "additionalProperties": false
      },
      "DeckWatchOutput": {
        "$id": "#/components/schemas/DeckWatchOutput",
        "type": "object",
        "properties": {
          "since": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "versions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Version"
            },
            "description": "The checkpoints written since"
          },
          "comments": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "add"
                    },
                    "thread": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                        },
                        "deckId": {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        },
                        "anchor": {
                          "oneOf": [
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "deck"
                                }
                              },
                              "required": [
                                "kind"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "slide"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "block"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                },
                                "blockId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId",
                                "blockId"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "text"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                },
                                "blockId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                                },
                                "path": {
                                  "type": "string",
                                  "pattern": "^\\/.+"
                                },
                                "range": {
                                  "type": "array",
                                  "prefixItems": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    }
                                  ],
                                  "items": false,
                                  "minItems": 2,
                                  "maxItems": 2
                                },
                                "quoted": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId",
                                "blockId",
                                "path",
                                "range",
                                "quoted"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "cell"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                },
                                "blockId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                                },
                                "cell": {
                                  "type": "array",
                                  "prefixItems": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    }
                                  ],
                                  "items": false,
                                  "minItems": 2,
                                  "maxItems": 2
                                }
                              },
                              "required": [
                                "kind",
                                "slideId",
                                "blockId",
                                "cell"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "notes"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId"
                              ],
                              "additionalProperties": false
                            }
                          ]
                        },
                        "comment": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                            },
                            "author": {
                              "type": "object",
                              "properties": {
                                "principalId": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 200
                                },
                                "label": {
                                  "type": "string",
                                  "minLength": 1
                                },
                                "kind": {
                                  "type": "string",
                                  "enum": [
                                    "human",
                                    "agent"
                                  ]
                                }
                              },
                              "required": [
                                "principalId",
                                "label",
                                "kind"
                              ],
                              "additionalProperties": false
                            },
                            "createdAt": {
                              "type": "string"
                            },
                            "editedAt": {
                              "type": "string"
                            },
                            "body": {
                              "type": "object",
                              "properties": {
                                "text": {
                                  "type": "string"
                                },
                                "mentions": {
                                  "maxItems": 20,
                                  "type": "array",
                                  "items": {
                                    "oneOf": [
                                      {
                                        "type": "object",
                                        "properties": {
                                          "kind": {
                                            "type": "string",
                                            "const": "principal"
                                          },
                                          "principalId": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 200
                                          }
                                        },
                                        "required": [
                                          "kind",
                                          "principalId"
                                        ],
                                        "additionalProperties": false
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "kind": {
                                            "type": "string",
                                            "const": "invite"
                                          },
                                          "inviteId": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 200
                                          }
                                        },
                                        "required": [
                                          "kind",
                                          "inviteId"
                                        ],
                                        "additionalProperties": false
                                      }
                                    ]
                                  }
                                }
                              },
                              "required": [
                                "text",
                                "mentions"
                              ],
                              "additionalProperties": false
                            },
                            "reactions": {
                              "maxItems": 24,
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "emoji": {
                                    "type": "string",
                                    "enum": [
                                      "👍",
                                      "👎",
                                      "❤️",
                                      "🎉",
                                      "😂",
                                      "😮",
                                      "😢",
                                      "🙏",
                                      "👀",
                                      "✅",
                                      "❌",
                                      "🔥",
                                      "💯",
                                      "🚀",
                                      "👏",
                                      "🤔",
                                      "⭐",
                                      "💡",
                                      "⚠️",
                                      "❓",
                                      "➕",
                                      "➖",
                                      "🙌",
                                      "😍"
                                    ]
                                  },
                                  "principalIds": {
                                    "type": "array",
                                    "items": {
                                      "type": "string",
                                      "minLength": 1,
                                      "maxLength": 200
                                    }
                                  }
                                },
                                "required": [
                                  "emoji",
                                  "principalIds"
                                ],
                                "additionalProperties": false
                              }
                            },
                            "deleted": {
                              "type": "object",
                              "properties": {
                                "at": {
                                  "type": "string"
                                },
                                "by": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 200
                                }
                              },
                              "required": [
                                "at",
                                "by"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "id",
                            "author",
                            "createdAt",
                            "body"
                          ],
                          "additionalProperties": false
                        },
                        "replies": {
                          "maxItems": 100,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                              },
                              "author": {
                                "type": "object",
                                "properties": {
                                  "principalId": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                  },
                                  "label": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "kind": {
                                    "type": "string",
                                    "enum": [
                                      "human",
                                      "agent"
                                    ]
                                  }
                                },
                                "required": [
                                  "principalId",
                                  "label",
                                  "kind"
                                ],
                                "additionalProperties": false
                              },
                              "createdAt": {
                                "type": "string"
                              },
                              "editedAt": {
                                "type": "string"
                              },
                              "body": {
                                "type": "object",
                                "properties": {
                                  "text": {
                                    "type": "string"
                                  },
                                  "mentions": {
                                    "maxItems": 20,
                                    "type": "array",
                                    "items": {
                                      "oneOf": [
                                        {
                                          "type": "object",
                                          "properties": {
                                            "kind": {
                                              "type": "string",
                                              "const": "principal"
                                            },
                                            "principalId": {
                                              "type": "string",
                                              "minLength": 1,
                                              "maxLength": 200
                                            }
                                          },
                                          "required": [
                                            "kind",
                                            "principalId"
                                          ],
                                          "additionalProperties": false
                                        },
                                        {
                                          "type": "object",
                                          "properties": {
                                            "kind": {
                                              "type": "string",
                                              "const": "invite"
                                            },
                                            "inviteId": {
                                              "type": "string",
                                              "minLength": 1,
                                              "maxLength": 200
                                            }
                                          },
                                          "required": [
                                            "kind",
                                            "inviteId"
                                          ],
                                          "additionalProperties": false
                                        }
                                      ]
                                    }
                                  }
                                },
                                "required": [
                                  "text",
                                  "mentions"
                                ],
                                "additionalProperties": false
                              },
                              "reactions": {
                                "maxItems": 24,
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "emoji": {
                                      "type": "string",
                                      "enum": [
                                        "👍",
                                        "👎",
                                        "❤️",
                                        "🎉",
                                        "😂",
                                        "😮",
                                        "😢",
                                        "🙏",
                                        "👀",
                                        "✅",
                                        "❌",
                                        "🔥",
                                        "💯",
                                        "🚀",
                                        "👏",
                                        "🤔",
                                        "⭐",
                                        "💡",
                                        "⚠️",
                                        "❓",
                                        "➕",
                                        "➖",
                                        "🙌",
                                        "😍"
                                      ]
                                    },
                                    "principalIds": {
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "minLength": 1,
                                        "maxLength": 200
                                      }
                                    }
                                  },
                                  "required": [
                                    "emoji",
                                    "principalIds"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "deleted": {
                                "type": "object",
                                "properties": {
                                  "at": {
                                    "type": "string"
                                  },
                                  "by": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "at",
                                  "by"
                                ],
                                "additionalProperties": false
                              }
                            },
                            "required": [
                              "id",
                              "author",
                              "createdAt",
                              "body"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "resolved": {
                          "type": "object",
                          "properties": {
                            "at": {
                              "type": "string"
                            },
                            "by": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            }
                          },
                          "required": [
                            "at",
                            "by"
                          ],
                          "additionalProperties": false
                        },
                        "assignee": {
                          "type": "object",
                          "properties": {
                            "to": {
                              "oneOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "principal"
                                    },
                                    "principalId": {
                                      "type": "string",
                                      "minLength": 1,
                                      "maxLength": 200
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "principalId"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "invite"
                                    },
                                    "inviteId": {
                                      "type": "string",
                                      "minLength": 1,
                                      "maxLength": 200
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "inviteId"
                                  ],
                                  "additionalProperties": false
                                }
                              ]
                            },
                            "by": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            },
                            "at": {
                              "type": "string"
                            },
                            "done": {
                              "type": "object",
                              "properties": {
                                "at": {
                                  "type": "string"
                                },
                                "by": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 200
                                }
                              },
                              "required": [
                                "at",
                                "by"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "to",
                            "by",
                            "at"
                          ],
                          "additionalProperties": false
                        },
                        "createdAt": {
                          "type": "string"
                        },
                        "updatedAt": {
                          "type": "string"
                        },
                        "revision": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "id",
                        "deckId",
                        "anchor",
                        "comment",
                        "replies",
                        "createdAt",
                        "updatedAt",
                        "revision"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "op",
                    "thread"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "reply"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "comment": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                        },
                        "author": {
                          "type": "object",
                          "properties": {
                            "principalId": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            },
                            "label": {
                              "type": "string",
                              "minLength": 1
                            },
                            "kind": {
                              "type": "string",
                              "enum": [
                                "human",
                                "agent"
                              ]
                            }
                          },
                          "required": [
                            "principalId",
                            "label",
                            "kind"
                          ],
                          "additionalProperties": false
                        },
                        "createdAt": {
                          "type": "string"
                        },
                        "editedAt": {
                          "type": "string"
                        },
                        "body": {
                          "type": "object",
                          "properties": {
                            "text": {
                              "type": "string"
                            },
                            "mentions": {
                              "maxItems": 20,
                              "type": "array",
                              "items": {
                                "oneOf": [
                                  {
                                    "type": "object",
                                    "properties": {
                                      "kind": {
                                        "type": "string",
                                        "const": "principal"
                                      },
                                      "principalId": {
                                        "type": "string",
                                        "minLength": 1,
                                        "maxLength": 200
                                      }
                                    },
                                    "required": [
                                      "kind",
                                      "principalId"
                                    ],
                                    "additionalProperties": false
                                  },
                                  {
                                    "type": "object",
                                    "properties": {
                                      "kind": {
                                        "type": "string",
                                        "const": "invite"
                                      },
                                      "inviteId": {
                                        "type": "string",
                                        "minLength": 1,
                                        "maxLength": 200
                                      }
                                    },
                                    "required": [
                                      "kind",
                                      "inviteId"
                                    ],
                                    "additionalProperties": false
                                  }
                                ]
                              }
                            }
                          },
                          "required": [
                            "text",
                            "mentions"
                          ],
                          "additionalProperties": false
                        },
                        "reactions": {
                          "maxItems": 24,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "emoji": {
                                "type": "string",
                                "enum": [
                                  "👍",
                                  "👎",
                                  "❤️",
                                  "🎉",
                                  "😂",
                                  "😮",
                                  "😢",
                                  "🙏",
                                  "👀",
                                  "✅",
                                  "❌",
                                  "🔥",
                                  "💯",
                                  "🚀",
                                  "👏",
                                  "🤔",
                                  "⭐",
                                  "💡",
                                  "⚠️",
                                  "❓",
                                  "➕",
                                  "➖",
                                  "🙌",
                                  "😍"
                                ]
                              },
                              "principalIds": {
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 200
                                }
                              }
                            },
                            "required": [
                              "emoji",
                              "principalIds"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "deleted": {
                          "type": "object",
                          "properties": {
                            "at": {
                              "type": "string"
                            },
                            "by": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            }
                          },
                          "required": [
                            "at",
                            "by"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "id",
                        "author",
                        "createdAt",
                        "body"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "comment"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "edit"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "commentId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "body": {
                      "type": "object",
                      "properties": {
                        "text": {
                          "type": "string"
                        },
                        "mentions": {
                          "maxItems": 20,
                          "type": "array",
                          "items": {
                            "oneOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "kind": {
                                    "type": "string",
                                    "const": "principal"
                                  },
                                  "principalId": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "kind",
                                  "principalId"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "kind": {
                                    "type": "string",
                                    "const": "invite"
                                  },
                                  "inviteId": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "kind",
                                  "inviteId"
                                ],
                                "additionalProperties": false
                              }
                            ]
                          }
                        }
                      },
                      "required": [
                        "text",
                        "mentions"
                      ],
                      "additionalProperties": false
                    },
                    "editedAt": {
                      "type": "string"
                    },
                    "by": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "expectedUpdatedAt": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "commentId",
                    "body",
                    "editedAt",
                    "by"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "delete"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "commentId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "at": {
                      "type": "string"
                    },
                    "by": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "restore": {
                      "type": "boolean",
                      "const": true
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "commentId",
                    "at",
                    "by"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "resolve"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "at": {
                      "type": "string"
                    },
                    "by": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "at",
                    "by"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "reopen"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "at": {
                      "type": "string"
                    },
                    "by": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "at",
                    "by"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "assign"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "to": {
                      "anyOf": [
                        {
                          "oneOf": [
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "principal"
                                },
                                "principalId": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 200
                                }
                              },
                              "required": [
                                "kind",
                                "principalId"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "invite"
                                },
                                "inviteId": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 200
                                }
                              },
                              "required": [
                                "kind",
                                "inviteId"
                              ],
                              "additionalProperties": false
                            }
                          ]
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "at": {
                      "type": "string"
                    },
                    "by": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "to",
                    "at",
                    "by"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "reassign"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "to": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "principal"
                            },
                            "principalId": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            }
                          },
                          "required": [
                            "kind",
                            "principalId"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "invite"
                            },
                            "inviteId": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            }
                          },
                          "required": [
                            "kind",
                            "inviteId"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    "at": {
                      "type": "string"
                    },
                    "by": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "to",
                    "at",
                    "by"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "done"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "at": {
                      "type": "string"
                    },
                    "by": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "at",
                    "by"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "react"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "commentId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "emoji": {
                      "type": "string",
                      "enum": [
                        "👍",
                        "👎",
                        "❤️",
                        "🎉",
                        "😂",
                        "😮",
                        "😢",
                        "🙏",
                        "👀",
                        "✅",
                        "❌",
                        "🔥",
                        "💯",
                        "🚀",
                        "👏",
                        "🤔",
                        "⭐",
                        "💡",
                        "⚠️",
                        "❓",
                        "➕",
                        "➖",
                        "🙌",
                        "😍"
                      ]
                    },
                    "principalId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "commentId",
                    "emoji",
                    "principalId"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "unreact"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "commentId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "emoji": {
                      "type": "string",
                      "enum": [
                        "👍",
                        "👎",
                        "❤️",
                        "🎉",
                        "😂",
                        "😮",
                        "😢",
                        "🙏",
                        "👀",
                        "✅",
                        "❌",
                        "🔥",
                        "💯",
                        "🚀",
                        "👏",
                        "🤔",
                        "⭐",
                        "💡",
                        "⚠️",
                        "❓",
                        "➕",
                        "➖",
                        "🙌",
                        "😍"
                      ]
                    },
                    "principalId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "commentId",
                    "emoji",
                    "principalId"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "move"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "anchor": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "deck"
                            }
                          },
                          "required": [
                            "kind"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "slide"
                            },
                            "slideId": {
                              "type": "string",
                              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                            }
                          },
                          "required": [
                            "kind",
                            "slideId"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "block"
                            },
                            "slideId": {
                              "type": "string",
                              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                            },
                            "blockId": {
                              "type": "string",
                              "pattern": "^[a-z0-9][a-z0-9-]*$"
                            }
                          },
                          "required": [
                            "kind",
                            "slideId",
                            "blockId"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "text"
                            },
                            "slideId": {
                              "type": "string",
                              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                            },
                            "blockId": {
                              "type": "string",
                              "pattern": "^[a-z0-9][a-z0-9-]*$"
                            },
                            "path": {
                              "type": "string",
                              "pattern": "^\\/.+"
                            },
                            "range": {
                              "type": "array",
                              "prefixItems": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                }
                              ],
                              "items": false,
                              "minItems": 2,
                              "maxItems": 2
                            },
                            "quoted": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "kind",
                            "slideId",
                            "blockId",
                            "path",
                            "range",
                            "quoted"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "cell"
                            },
                            "slideId": {
                              "type": "string",
                              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                            },
                            "blockId": {
                              "type": "string",
                              "pattern": "^[a-z0-9][a-z0-9-]*$"
                            },
                            "cell": {
                              "type": "array",
                              "prefixItems": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                }
                              ],
                              "items": false,
                              "minItems": 2,
                              "maxItems": 2
                            }
                          },
                          "required": [
                            "kind",
                            "slideId",
                            "blockId",
                            "cell"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "notes"
                            },
                            "slideId": {
                              "type": "string",
                              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                            }
                          },
                          "required": [
                            "kind",
                            "slideId"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    "at": {
                      "type": "string"
                    },
                    "by": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "expectedUpdatedAt": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "anchor",
                    "at",
                    "by"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "op": {
                      "type": "string",
                      "const": "shift"
                    },
                    "threadId": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "anchor": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "deck"
                            }
                          },
                          "required": [
                            "kind"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "slide"
                            },
                            "slideId": {
                              "type": "string",
                              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                            }
                          },
                          "required": [
                            "kind",
                            "slideId"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "block"
                            },
                            "slideId": {
                              "type": "string",
                              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                            },
                            "blockId": {
                              "type": "string",
                              "pattern": "^[a-z0-9][a-z0-9-]*$"
                            }
                          },
                          "required": [
                            "kind",
                            "slideId",
                            "blockId"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "text"
                            },
                            "slideId": {
                              "type": "string",
                              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                            },
                            "blockId": {
                              "type": "string",
                              "pattern": "^[a-z0-9][a-z0-9-]*$"
                            },
                            "path": {
                              "type": "string",
                              "pattern": "^\\/.+"
                            },
                            "range": {
                              "type": "array",
                              "prefixItems": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                }
                              ],
                              "items": false,
                              "minItems": 2,
                              "maxItems": 2
                            },
                            "quoted": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "kind",
                            "slideId",
                            "blockId",
                            "path",
                            "range",
                            "quoted"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "cell"
                            },
                            "slideId": {
                              "type": "string",
                              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                            },
                            "blockId": {
                              "type": "string",
                              "pattern": "^[a-z0-9][a-z0-9-]*$"
                            },
                            "cell": {
                              "type": "array",
                              "prefixItems": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                }
                              ],
                              "items": false,
                              "minItems": 2,
                              "maxItems": 2
                            }
                          },
                          "required": [
                            "kind",
                            "slideId",
                            "blockId",
                            "cell"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "notes"
                            },
                            "slideId": {
                              "type": "string",
                              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                            }
                          },
                          "required": [
                            "kind",
                            "slideId"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    }
                  },
                  "required": [
                    "op",
                    "threadId",
                    "anchor"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "description": "The comment entries since"
          },
          "commentsRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          },
          "timedOut": {
            "type": "boolean"
          }
        },
        "required": [
          "since",
          "revision",
          "versions",
          "comments",
          "commentsRevision",
          "timedOut"
        ],
        "additionalProperties": false
      },
      "DeckFollowInput": {
        "$id": "#/components/schemas/DeckFollowInput",
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "uri",
            "description": "The studio to talk to; the hosts.json default otherwise"
          },
          "push": {
            "description": "Push local writes to the studio as they land",
            "type": "boolean"
          },
          "comments": {
            "description": "Mirror the comments group too",
            "type": "boolean"
          },
          "force": {
            "description": "Overwrite a checkout that diverged",
            "type": "boolean"
          },
          "theirs": {
            "description": "On a divergence keep the studio’s records",
            "type": "boolean"
          }
        },
        "required": [
          "from"
        ],
        "additionalProperties": false
      },
      "DeckFollowOutput": {
        "$id": "#/components/schemas/DeckFollowOutput",
        "type": "object",
        "properties": {
          "deckId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "from": {
            "type": "string"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "documents": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "assets": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "versions": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "comments": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "pushed": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "conflicts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "deckId",
          "from",
          "revision",
          "documents",
          "assets",
          "versions",
          "comments",
          "pushed",
          "conflicts"
        ],
        "additionalProperties": false
      },
      "CommentAddInput": {
        "$id": "#/components/schemas/CommentAddInput",
        "type": "object",
        "properties": {
          "anchor": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "deck"
                  }
                },
                "required": [
                  "kind"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "slide"
                  },
                  "slideId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "kind",
                  "slideId"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "block"
                  },
                  "slideId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "blockId": {
                    "type": "string",
                    "pattern": "^[a-z0-9][a-z0-9-]*$"
                  }
                },
                "required": [
                  "kind",
                  "slideId",
                  "blockId"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "text"
                  },
                  "slideId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "blockId": {
                    "type": "string",
                    "pattern": "^[a-z0-9][a-z0-9-]*$"
                  },
                  "path": {
                    "type": "string",
                    "pattern": "^\\/.+"
                  },
                  "range": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    ],
                    "items": false,
                    "minItems": 2,
                    "maxItems": 2
                  },
                  "quoted": {
                    "type": "string"
                  }
                },
                "required": [
                  "kind",
                  "slideId",
                  "blockId",
                  "path",
                  "range",
                  "quoted"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "cell"
                  },
                  "slideId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  },
                  "blockId": {
                    "type": "string",
                    "pattern": "^[a-z0-9][a-z0-9-]*$"
                  },
                  "cell": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    ],
                    "items": false,
                    "minItems": 2,
                    "maxItems": 2
                  }
                },
                "required": [
                  "kind",
                  "slideId",
                  "blockId",
                  "cell"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "notes"
                  },
                  "slideId": {
                    "type": "string",
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                  }
                },
                "required": [
                  "kind",
                  "slideId"
                ],
                "additionalProperties": false
              }
            ],
            "description": "deck, slide:<id>, <slide>#<block>, <slide>#<block>/<path>:<start>-<end>, <slide>#<block>/cell:<r>,<c> or notes:<slide> on the CLI; the anchor object elsewhere"
          },
          "body": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string"
              },
              "mentions": {
                "maxItems": 20,
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "principal"
                        },
                        "principalId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "kind",
                        "principalId"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "invite"
                        },
                        "inviteId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "kind",
                        "inviteId"
                      ],
                      "additionalProperties": false
                    }
                  ]
                }
              }
            },
            "required": [
              "text",
              "mentions"
            ],
            "additionalProperties": false
          },
          "assignee": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "principal"
                  },
                  "principalId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "kind",
                  "principalId"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "invite"
                  },
                  "inviteId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "kind",
                  "inviteId"
                ],
                "additionalProperties": false
              }
            ]
          },
          "baseRevision": {
            "description": "The comments revision the caller read; a stale value never refuses (SPEC-3 5.2)",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "anchor",
          "body"
        ],
        "additionalProperties": false
      },
      "CommentAddOutput": {
        "$id": "#/components/schemas/CommentAddOutput",
        "type": "object",
        "properties": {
          "thread": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
              },
              "deckId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "anchor": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "deck"
                      }
                    },
                    "required": [
                      "kind"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "slide"
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      }
                    },
                    "required": [
                      "kind",
                      "slideId"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "block"
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "blockId": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      }
                    },
                    "required": [
                      "kind",
                      "slideId",
                      "blockId"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "text"
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "blockId": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "path": {
                        "type": "string",
                        "pattern": "^\\/.+"
                      },
                      "range": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        ],
                        "items": false,
                        "minItems": 2,
                        "maxItems": 2
                      },
                      "quoted": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "kind",
                      "slideId",
                      "blockId",
                      "path",
                      "range",
                      "quoted"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "cell"
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "blockId": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "cell": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        ],
                        "items": false,
                        "minItems": 2,
                        "maxItems": 2
                      }
                    },
                    "required": [
                      "kind",
                      "slideId",
                      "blockId",
                      "cell"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "notes"
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      }
                    },
                    "required": [
                      "kind",
                      "slideId"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "comment": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                  },
                  "author": {
                    "type": "object",
                    "properties": {
                      "principalId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "label": {
                        "type": "string",
                        "minLength": 1
                      },
                      "kind": {
                        "type": "string",
                        "enum": [
                          "human",
                          "agent"
                        ]
                      }
                    },
                    "required": [
                      "principalId",
                      "label",
                      "kind"
                    ],
                    "additionalProperties": false
                  },
                  "createdAt": {
                    "type": "string"
                  },
                  "editedAt": {
                    "type": "string"
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string"
                      },
                      "mentions": {
                        "maxItems": 20,
                        "type": "array",
                        "items": {
                          "oneOf": [
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "principal"
                                },
                                "principalId": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 200
                                }
                              },
                              "required": [
                                "kind",
                                "principalId"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "invite"
                                },
                                "inviteId": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 200
                                }
                              },
                              "required": [
                                "kind",
                                "inviteId"
                              ],
                              "additionalProperties": false
                            }
                          ]
                        }
                      }
                    },
                    "required": [
                      "text",
                      "mentions"
                    ],
                    "additionalProperties": false
                  },
                  "reactions": {
                    "maxItems": 24,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "emoji": {
                          "type": "string",
                          "enum": [
                            "👍",
                            "👎",
                            "❤️",
                            "🎉",
                            "😂",
                            "😮",
                            "😢",
                            "🙏",
                            "👀",
                            "✅",
                            "❌",
                            "🔥",
                            "💯",
                            "🚀",
                            "👏",
                            "🤔",
                            "⭐",
                            "💡",
                            "⚠️",
                            "❓",
                            "➕",
                            "➖",
                            "🙌",
                            "😍"
                          ]
                        },
                        "principalIds": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        }
                      },
                      "required": [
                        "emoji",
                        "principalIds"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "deleted": {
                    "type": "object",
                    "properties": {
                      "at": {
                        "type": "string"
                      },
                      "by": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "at",
                      "by"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "id",
                  "author",
                  "createdAt",
                  "body"
                ],
                "additionalProperties": false
              },
              "replies": {
                "maxItems": 100,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "author": {
                      "type": "object",
                      "properties": {
                        "principalId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "label": {
                          "type": "string",
                          "minLength": 1
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "human",
                            "agent"
                          ]
                        }
                      },
                      "required": [
                        "principalId",
                        "label",
                        "kind"
                      ],
                      "additionalProperties": false
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "editedAt": {
                      "type": "string"
                    },
                    "body": {
                      "type": "object",
                      "properties": {
                        "text": {
                          "type": "string"
                        },
                        "mentions": {
                          "maxItems": 20,
                          "type": "array",
                          "items": {
                            "oneOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "kind": {
                                    "type": "string",
                                    "const": "principal"
                                  },
                                  "principalId": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "kind",
                                  "principalId"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "kind": {
                                    "type": "string",
                                    "const": "invite"
                                  },
                                  "inviteId": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "kind",
                                  "inviteId"
                                ],
                                "additionalProperties": false
                              }
                            ]
                          }
                        }
                      },
                      "required": [
                        "text",
                        "mentions"
                      ],
                      "additionalProperties": false
                    },
                    "reactions": {
                      "maxItems": 24,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "emoji": {
                            "type": "string",
                            "enum": [
                              "👍",
                              "👎",
                              "❤️",
                              "🎉",
                              "😂",
                              "😮",
                              "😢",
                              "🙏",
                              "👀",
                              "✅",
                              "❌",
                              "🔥",
                              "💯",
                              "🚀",
                              "👏",
                              "🤔",
                              "⭐",
                              "💡",
                              "⚠️",
                              "❓",
                              "➕",
                              "➖",
                              "🙌",
                              "😍"
                            ]
                          },
                          "principalIds": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            }
                          }
                        },
                        "required": [
                          "emoji",
                          "principalIds"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "deleted": {
                      "type": "object",
                      "properties": {
                        "at": {
                          "type": "string"
                        },
                        "by": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "at",
                        "by"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "id",
                    "author",
                    "createdAt",
                    "body"
                  ],
                  "additionalProperties": false
                }
              },
              "resolved": {
                "type": "object",
                "properties": {
                  "at": {
                    "type": "string"
                  },
                  "by": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "at",
                  "by"
                ],
                "additionalProperties": false
              },
              "assignee": {
                "type": "object",
                "properties": {
                  "to": {
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "const": "principal"
                          },
                          "principalId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "required": [
                          "kind",
                          "principalId"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "const": "invite"
                          },
                          "inviteId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "required": [
                          "kind",
                          "inviteId"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "by": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "at": {
                    "type": "string"
                  },
                  "done": {
                    "type": "object",
                    "properties": {
                      "at": {
                        "type": "string"
                      },
                      "by": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "at",
                      "by"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "to",
                  "by",
                  "at"
                ],
                "additionalProperties": false
              },
              "createdAt": {
                "type": "string"
              },
              "updatedAt": {
                "type": "string"
              },
              "revision": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "deckId",
              "anchor",
              "comment",
              "replies",
              "createdAt",
              "updatedAt",
              "revision"
            ],
            "additionalProperties": false
          },
          "commentsRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          }
        },
        "required": [
          "thread",
          "commentsRevision"
        ],
        "additionalProperties": false
      },
      "CommentReplyInput": {
        "$id": "#/components/schemas/CommentReplyInput",
        "type": "object",
        "properties": {
          "threadId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          },
          "body": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string"
              },
              "mentions": {
                "maxItems": 20,
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "principal"
                        },
                        "principalId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "kind",
                        "principalId"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "invite"
                        },
                        "inviteId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "kind",
                        "inviteId"
                      ],
                      "additionalProperties": false
                    }
                  ]
                }
              }
            },
            "required": [
              "text",
              "mentions"
            ],
            "additionalProperties": false
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          }
        },
        "required": [
          "threadId",
          "body"
        ],
        "additionalProperties": false
      },
      "CommentEditInput": {
        "$id": "#/components/schemas/CommentEditInput",
        "type": "object",
        "properties": {
          "threadId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          },
          "commentId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          },
          "body": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string"
              },
              "mentions": {
                "maxItems": 20,
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "principal"
                        },
                        "principalId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "kind",
                        "principalId"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "invite"
                        },
                        "inviteId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "kind",
                        "inviteId"
                      ],
                      "additionalProperties": false
                    }
                  ]
                }
              }
            },
            "required": [
              "text",
              "mentions"
            ],
            "additionalProperties": false
          },
          "expectedUpdatedAt": {
            "type": "string",
            "description": "The thread’s updatedAt the caller read"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          }
        },
        "required": [
          "threadId",
          "commentId",
          "body",
          "expectedUpdatedAt"
        ],
        "additionalProperties": false
      },
      "CommentDeleteInput": {
        "$id": "#/components/schemas/CommentDeleteInput",
        "type": "object",
        "properties": {
          "threadId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          },
          "commentId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          },
          "restore": {
            "description": "Undo a deletion within 30 days",
            "type": "boolean"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          }
        },
        "required": [
          "threadId",
          "commentId"
        ],
        "additionalProperties": false
      },
      "CommentResolveInput": {
        "$id": "#/components/schemas/CommentResolveInput",
        "type": "object",
        "properties": {
          "threadId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          }
        },
        "required": [
          "threadId"
        ],
        "additionalProperties": false
      },
      "CommentReopenInput": {
        "$id": "#/components/schemas/CommentReopenInput",
        "type": "object",
        "properties": {
          "threadId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          }
        },
        "required": [
          "threadId"
        ],
        "additionalProperties": false
      },
      "CommentAssignInput": {
        "$id": "#/components/schemas/CommentAssignInput",
        "type": "object",
        "properties": {
          "threadId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          },
          "assignee": {
            "anyOf": [
              {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "principal"
                      },
                      "principalId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "kind",
                      "principalId"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "invite"
                      },
                      "inviteId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "kind",
                      "inviteId"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          }
        },
        "required": [
          "threadId",
          "assignee"
        ],
        "additionalProperties": false
      },
      "CommentDoneInput": {
        "$id": "#/components/schemas/CommentDoneInput",
        "type": "object",
        "properties": {
          "threadId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          }
        },
        "required": [
          "threadId"
        ],
        "additionalProperties": false
      },
      "CommentReactInput": {
        "$id": "#/components/schemas/CommentReactInput",
        "type": "object",
        "properties": {
          "threadId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          },
          "commentId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          },
          "emoji": {
            "type": "string",
            "enum": [
              "👍",
              "👎",
              "❤️",
              "🎉",
              "😂",
              "😮",
              "😢",
              "🙏",
              "👀",
              "✅",
              "❌",
              "🔥",
              "💯",
              "🚀",
              "👏",
              "🤔",
              "⭐",
              "💡",
              "⚠️",
              "❓",
              "➕",
              "➖",
              "🙌",
              "😍"
            ]
          },
          "on": {
            "type": "boolean"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          }
        },
        "required": [
          "threadId",
          "commentId",
          "emoji",
          "on"
        ],
        "additionalProperties": false
      },
      "CommentListInput": {
        "$id": "#/components/schemas/CommentListInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "state": {
            "description": "open unless set",
            "type": "string",
            "enum": [
              "open",
              "resolved",
              "all"
            ]
          },
          "forMe": {
            "description": "Threads that mention or are assigned to the caller",
            "type": "boolean"
          },
          "author": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "search": {
            "type": "string",
            "maxLength": 200
          },
          "includeDeleted": {
            "description": "Keep the tombstones in the answer",
            "type": "boolean"
          },
          "since": {
            "description": "Threads touched after this comments revision",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "limit": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 500
          }
        },
        "additionalProperties": false
      },
      "CommentListOutput": {
        "$id": "#/components/schemas/CommentListOutput",
        "type": "object",
        "properties": {
          "threads": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                },
                "deckId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "anchor": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "deck"
                        }
                      },
                      "required": [
                        "kind"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "slide"
                        },
                        "slideId": {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        }
                      },
                      "required": [
                        "kind",
                        "slideId"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "block"
                        },
                        "slideId": {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        },
                        "blockId": {
                          "type": "string",
                          "pattern": "^[a-z0-9][a-z0-9-]*$"
                        }
                      },
                      "required": [
                        "kind",
                        "slideId",
                        "blockId"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "text"
                        },
                        "slideId": {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        },
                        "blockId": {
                          "type": "string",
                          "pattern": "^[a-z0-9][a-z0-9-]*$"
                        },
                        "path": {
                          "type": "string",
                          "pattern": "^\\/.+"
                        },
                        "range": {
                          "type": "array",
                          "prefixItems": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          ],
                          "items": false,
                          "minItems": 2,
                          "maxItems": 2
                        },
                        "quoted": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "kind",
                        "slideId",
                        "blockId",
                        "path",
                        "range",
                        "quoted"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "cell"
                        },
                        "slideId": {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        },
                        "blockId": {
                          "type": "string",
                          "pattern": "^[a-z0-9][a-z0-9-]*$"
                        },
                        "cell": {
                          "type": "array",
                          "prefixItems": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          ],
                          "items": false,
                          "minItems": 2,
                          "maxItems": 2
                        }
                      },
                      "required": [
                        "kind",
                        "slideId",
                        "blockId",
                        "cell"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "notes"
                        },
                        "slideId": {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        }
                      },
                      "required": [
                        "kind",
                        "slideId"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "comment": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "author": {
                      "type": "object",
                      "properties": {
                        "principalId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "label": {
                          "type": "string",
                          "minLength": 1
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "human",
                            "agent"
                          ]
                        }
                      },
                      "required": [
                        "principalId",
                        "label",
                        "kind"
                      ],
                      "additionalProperties": false
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "editedAt": {
                      "type": "string"
                    },
                    "body": {
                      "type": "object",
                      "properties": {
                        "text": {
                          "type": "string"
                        },
                        "mentions": {
                          "maxItems": 20,
                          "type": "array",
                          "items": {
                            "oneOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "kind": {
                                    "type": "string",
                                    "const": "principal"
                                  },
                                  "principalId": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "kind",
                                  "principalId"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "kind": {
                                    "type": "string",
                                    "const": "invite"
                                  },
                                  "inviteId": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "kind",
                                  "inviteId"
                                ],
                                "additionalProperties": false
                              }
                            ]
                          }
                        }
                      },
                      "required": [
                        "text",
                        "mentions"
                      ],
                      "additionalProperties": false
                    },
                    "reactions": {
                      "maxItems": 24,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "emoji": {
                            "type": "string",
                            "enum": [
                              "👍",
                              "👎",
                              "❤️",
                              "🎉",
                              "😂",
                              "😮",
                              "😢",
                              "🙏",
                              "👀",
                              "✅",
                              "❌",
                              "🔥",
                              "💯",
                              "🚀",
                              "👏",
                              "🤔",
                              "⭐",
                              "💡",
                              "⚠️",
                              "❓",
                              "➕",
                              "➖",
                              "🙌",
                              "😍"
                            ]
                          },
                          "principalIds": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            }
                          }
                        },
                        "required": [
                          "emoji",
                          "principalIds"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "deleted": {
                      "type": "object",
                      "properties": {
                        "at": {
                          "type": "string"
                        },
                        "by": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "at",
                        "by"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "id",
                    "author",
                    "createdAt",
                    "body"
                  ],
                  "additionalProperties": false
                },
                "replies": {
                  "maxItems": 100,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                      },
                      "author": {
                        "type": "object",
                        "properties": {
                          "principalId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "label": {
                            "type": "string",
                            "minLength": 1
                          },
                          "kind": {
                            "type": "string",
                            "enum": [
                              "human",
                              "agent"
                            ]
                          }
                        },
                        "required": [
                          "principalId",
                          "label",
                          "kind"
                        ],
                        "additionalProperties": false
                      },
                      "createdAt": {
                        "type": "string"
                      },
                      "editedAt": {
                        "type": "string"
                      },
                      "body": {
                        "type": "object",
                        "properties": {
                          "text": {
                            "type": "string"
                          },
                          "mentions": {
                            "maxItems": 20,
                            "type": "array",
                            "items": {
                              "oneOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "principal"
                                    },
                                    "principalId": {
                                      "type": "string",
                                      "minLength": 1,
                                      "maxLength": 200
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "principalId"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "invite"
                                    },
                                    "inviteId": {
                                      "type": "string",
                                      "minLength": 1,
                                      "maxLength": 200
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "inviteId"
                                  ],
                                  "additionalProperties": false
                                }
                              ]
                            }
                          }
                        },
                        "required": [
                          "text",
                          "mentions"
                        ],
                        "additionalProperties": false
                      },
                      "reactions": {
                        "maxItems": 24,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "emoji": {
                              "type": "string",
                              "enum": [
                                "👍",
                                "👎",
                                "❤️",
                                "🎉",
                                "😂",
                                "😮",
                                "😢",
                                "🙏",
                                "👀",
                                "✅",
                                "❌",
                                "🔥",
                                "💯",
                                "🚀",
                                "👏",
                                "🤔",
                                "⭐",
                                "💡",
                                "⚠️",
                                "❓",
                                "➕",
                                "➖",
                                "🙌",
                                "😍"
                              ]
                            },
                            "principalIds": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 200
                              }
                            }
                          },
                          "required": [
                            "emoji",
                            "principalIds"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "deleted": {
                        "type": "object",
                        "properties": {
                          "at": {
                            "type": "string"
                          },
                          "by": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "required": [
                          "at",
                          "by"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "id",
                      "author",
                      "createdAt",
                      "body"
                    ],
                    "additionalProperties": false
                  }
                },
                "resolved": {
                  "type": "object",
                  "properties": {
                    "at": {
                      "type": "string"
                    },
                    "by": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "at",
                    "by"
                  ],
                  "additionalProperties": false
                },
                "assignee": {
                  "type": "object",
                  "properties": {
                    "to": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "principal"
                            },
                            "principalId": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            }
                          },
                          "required": [
                            "kind",
                            "principalId"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "invite"
                            },
                            "inviteId": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            }
                          },
                          "required": [
                            "kind",
                            "inviteId"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    "by": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "at": {
                      "type": "string"
                    },
                    "done": {
                      "type": "object",
                      "properties": {
                        "at": {
                          "type": "string"
                        },
                        "by": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "at",
                        "by"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "to",
                    "by",
                    "at"
                  ],
                  "additionalProperties": false
                },
                "createdAt": {
                  "type": "string"
                },
                "updatedAt": {
                  "type": "string"
                },
                "revision": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "placement": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "orphaned": {
                          "type": "boolean",
                          "const": false
                        },
                        "anchor": {
                          "oneOf": [
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "deck"
                                }
                              },
                              "required": [
                                "kind"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "slide"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "block"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                },
                                "blockId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId",
                                "blockId"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "text"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                },
                                "blockId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                                },
                                "path": {
                                  "type": "string",
                                  "pattern": "^\\/.+"
                                },
                                "range": {
                                  "type": "array",
                                  "prefixItems": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    }
                                  ],
                                  "items": false,
                                  "minItems": 2,
                                  "maxItems": 2
                                },
                                "quoted": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId",
                                "blockId",
                                "path",
                                "range",
                                "quoted"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "cell"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                },
                                "blockId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                                },
                                "cell": {
                                  "type": "array",
                                  "prefixItems": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    }
                                  ],
                                  "items": false,
                                  "minItems": 2,
                                  "maxItems": 2
                                }
                              },
                              "required": [
                                "kind",
                                "slideId",
                                "blockId",
                                "cell"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "notes"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId"
                              ],
                              "additionalProperties": false
                            }
                          ]
                        },
                        "slideId": {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        },
                        "blockId": {
                          "type": "string",
                          "pattern": "^[a-z0-9][a-z0-9-]*$"
                        },
                        "pointer": {
                          "type": "string"
                        },
                        "text": {
                          "type": "string"
                        },
                        "cell": {
                          "type": "array",
                          "prefixItems": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          ],
                          "items": false,
                          "minItems": 2,
                          "maxItems": 2
                        }
                      },
                      "required": [
                        "orphaned",
                        "anchor"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "orphaned": {
                          "type": "boolean",
                          "const": true
                        },
                        "reason": {
                          "type": "string",
                          "enum": [
                            "slide removed",
                            "block removed",
                            "text removed",
                            "path missing",
                            "cell missing",
                            "range outside"
                          ]
                        },
                        "anchor": {
                          "oneOf": [
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "deck"
                                }
                              },
                              "required": [
                                "kind"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "slide"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "block"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                },
                                "blockId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId",
                                "blockId"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "text"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                },
                                "blockId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                                },
                                "path": {
                                  "type": "string",
                                  "pattern": "^\\/.+"
                                },
                                "range": {
                                  "type": "array",
                                  "prefixItems": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    }
                                  ],
                                  "items": false,
                                  "minItems": 2,
                                  "maxItems": 2
                                },
                                "quoted": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId",
                                "blockId",
                                "path",
                                "range",
                                "quoted"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "cell"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                },
                                "blockId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                                },
                                "cell": {
                                  "type": "array",
                                  "prefixItems": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    }
                                  ],
                                  "items": false,
                                  "minItems": 2,
                                  "maxItems": 2
                                }
                              },
                              "required": [
                                "kind",
                                "slideId",
                                "blockId",
                                "cell"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "notes"
                                },
                                "slideId": {
                                  "type": "string",
                                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                                }
                              },
                              "required": [
                                "kind",
                                "slideId"
                              ],
                              "additionalProperties": false
                            }
                          ]
                        },
                        "slideId": {
                          "type": "string",
                          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                        }
                      },
                      "required": [
                        "orphaned",
                        "reason",
                        "anchor"
                      ],
                      "additionalProperties": false
                    }
                  ],
                  "description": "Where the anchor lands on the document now"
                }
              },
              "required": [
                "id",
                "deckId",
                "anchor",
                "comment",
                "replies",
                "createdAt",
                "updatedAt",
                "revision",
                "placement"
              ],
              "additionalProperties": false
            }
          },
          "commentsRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Threads matching before the limit"
          }
        },
        "required": [
          "threads",
          "commentsRevision",
          "total"
        ],
        "additionalProperties": false
      },
      "CommentGetInput": {
        "$id": "#/components/schemas/CommentGetInput",
        "type": "object",
        "properties": {
          "threadId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          }
        },
        "required": [
          "threadId"
        ],
        "additionalProperties": false
      },
      "CommentGetOutput": {
        "$id": "#/components/schemas/CommentGetOutput",
        "type": "object",
        "properties": {
          "thread": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
              },
              "deckId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "anchor": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "deck"
                      }
                    },
                    "required": [
                      "kind"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "slide"
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      }
                    },
                    "required": [
                      "kind",
                      "slideId"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "block"
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "blockId": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      }
                    },
                    "required": [
                      "kind",
                      "slideId",
                      "blockId"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "text"
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "blockId": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "path": {
                        "type": "string",
                        "pattern": "^\\/.+"
                      },
                      "range": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        ],
                        "items": false,
                        "minItems": 2,
                        "maxItems": 2
                      },
                      "quoted": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "kind",
                      "slideId",
                      "blockId",
                      "path",
                      "range",
                      "quoted"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "cell"
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "blockId": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "cell": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        ],
                        "items": false,
                        "minItems": 2,
                        "maxItems": 2
                      }
                    },
                    "required": [
                      "kind",
                      "slideId",
                      "blockId",
                      "cell"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "notes"
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      }
                    },
                    "required": [
                      "kind",
                      "slideId"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "comment": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                  },
                  "author": {
                    "type": "object",
                    "properties": {
                      "principalId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "label": {
                        "type": "string",
                        "minLength": 1
                      },
                      "kind": {
                        "type": "string",
                        "enum": [
                          "human",
                          "agent"
                        ]
                      }
                    },
                    "required": [
                      "principalId",
                      "label",
                      "kind"
                    ],
                    "additionalProperties": false
                  },
                  "createdAt": {
                    "type": "string"
                  },
                  "editedAt": {
                    "type": "string"
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string"
                      },
                      "mentions": {
                        "maxItems": 20,
                        "type": "array",
                        "items": {
                          "oneOf": [
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "principal"
                                },
                                "principalId": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 200
                                }
                              },
                              "required": [
                                "kind",
                                "principalId"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "invite"
                                },
                                "inviteId": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 200
                                }
                              },
                              "required": [
                                "kind",
                                "inviteId"
                              ],
                              "additionalProperties": false
                            }
                          ]
                        }
                      }
                    },
                    "required": [
                      "text",
                      "mentions"
                    ],
                    "additionalProperties": false
                  },
                  "reactions": {
                    "maxItems": 24,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "emoji": {
                          "type": "string",
                          "enum": [
                            "👍",
                            "👎",
                            "❤️",
                            "🎉",
                            "😂",
                            "😮",
                            "😢",
                            "🙏",
                            "👀",
                            "✅",
                            "❌",
                            "🔥",
                            "💯",
                            "🚀",
                            "👏",
                            "🤔",
                            "⭐",
                            "💡",
                            "⚠️",
                            "❓",
                            "➕",
                            "➖",
                            "🙌",
                            "😍"
                          ]
                        },
                        "principalIds": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        }
                      },
                      "required": [
                        "emoji",
                        "principalIds"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "deleted": {
                    "type": "object",
                    "properties": {
                      "at": {
                        "type": "string"
                      },
                      "by": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "at",
                      "by"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "id",
                  "author",
                  "createdAt",
                  "body"
                ],
                "additionalProperties": false
              },
              "replies": {
                "maxItems": 100,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                    },
                    "author": {
                      "type": "object",
                      "properties": {
                        "principalId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "label": {
                          "type": "string",
                          "minLength": 1
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "human",
                            "agent"
                          ]
                        }
                      },
                      "required": [
                        "principalId",
                        "label",
                        "kind"
                      ],
                      "additionalProperties": false
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "editedAt": {
                      "type": "string"
                    },
                    "body": {
                      "type": "object",
                      "properties": {
                        "text": {
                          "type": "string"
                        },
                        "mentions": {
                          "maxItems": 20,
                          "type": "array",
                          "items": {
                            "oneOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "kind": {
                                    "type": "string",
                                    "const": "principal"
                                  },
                                  "principalId": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "kind",
                                  "principalId"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "kind": {
                                    "type": "string",
                                    "const": "invite"
                                  },
                                  "inviteId": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "kind",
                                  "inviteId"
                                ],
                                "additionalProperties": false
                              }
                            ]
                          }
                        }
                      },
                      "required": [
                        "text",
                        "mentions"
                      ],
                      "additionalProperties": false
                    },
                    "reactions": {
                      "maxItems": 24,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "emoji": {
                            "type": "string",
                            "enum": [
                              "👍",
                              "👎",
                              "❤️",
                              "🎉",
                              "😂",
                              "😮",
                              "😢",
                              "🙏",
                              "👀",
                              "✅",
                              "❌",
                              "🔥",
                              "💯",
                              "🚀",
                              "👏",
                              "🤔",
                              "⭐",
                              "💡",
                              "⚠️",
                              "❓",
                              "➕",
                              "➖",
                              "🙌",
                              "😍"
                            ]
                          },
                          "principalIds": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            }
                          }
                        },
                        "required": [
                          "emoji",
                          "principalIds"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "deleted": {
                      "type": "object",
                      "properties": {
                        "at": {
                          "type": "string"
                        },
                        "by": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "at",
                        "by"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "id",
                    "author",
                    "createdAt",
                    "body"
                  ],
                  "additionalProperties": false
                }
              },
              "resolved": {
                "type": "object",
                "properties": {
                  "at": {
                    "type": "string"
                  },
                  "by": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "at",
                  "by"
                ],
                "additionalProperties": false
              },
              "assignee": {
                "type": "object",
                "properties": {
                  "to": {
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "const": "principal"
                          },
                          "principalId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "required": [
                          "kind",
                          "principalId"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "const": "invite"
                          },
                          "inviteId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "required": [
                          "kind",
                          "inviteId"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "by": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "at": {
                    "type": "string"
                  },
                  "done": {
                    "type": "object",
                    "properties": {
                      "at": {
                        "type": "string"
                      },
                      "by": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "at",
                      "by"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "to",
                  "by",
                  "at"
                ],
                "additionalProperties": false
              },
              "createdAt": {
                "type": "string"
              },
              "updatedAt": {
                "type": "string"
              },
              "revision": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "placement": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "orphaned": {
                        "type": "boolean",
                        "const": false
                      },
                      "anchor": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "deck"
                              }
                            },
                            "required": [
                              "kind"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "slide"
                              },
                              "slideId": {
                                "type": "string",
                                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                              }
                            },
                            "required": [
                              "kind",
                              "slideId"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "block"
                              },
                              "slideId": {
                                "type": "string",
                                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                              },
                              "blockId": {
                                "type": "string",
                                "pattern": "^[a-z0-9][a-z0-9-]*$"
                              }
                            },
                            "required": [
                              "kind",
                              "slideId",
                              "blockId"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "text"
                              },
                              "slideId": {
                                "type": "string",
                                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                              },
                              "blockId": {
                                "type": "string",
                                "pattern": "^[a-z0-9][a-z0-9-]*$"
                              },
                              "path": {
                                "type": "string",
                                "pattern": "^\\/.+"
                              },
                              "range": {
                                "type": "array",
                                "prefixItems": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  }
                                ],
                                "items": false,
                                "minItems": 2,
                                "maxItems": 2
                              },
                              "quoted": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "slideId",
                              "blockId",
                              "path",
                              "range",
                              "quoted"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "cell"
                              },
                              "slideId": {
                                "type": "string",
                                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                              },
                              "blockId": {
                                "type": "string",
                                "pattern": "^[a-z0-9][a-z0-9-]*$"
                              },
                              "cell": {
                                "type": "array",
                                "prefixItems": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  }
                                ],
                                "items": false,
                                "minItems": 2,
                                "maxItems": 2
                              }
                            },
                            "required": [
                              "kind",
                              "slideId",
                              "blockId",
                              "cell"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "notes"
                              },
                              "slideId": {
                                "type": "string",
                                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                              }
                            },
                            "required": [
                              "kind",
                              "slideId"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "blockId": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "pointer": {
                        "type": "string"
                      },
                      "text": {
                        "type": "string"
                      },
                      "cell": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        ],
                        "items": false,
                        "minItems": 2,
                        "maxItems": 2
                      }
                    },
                    "required": [
                      "orphaned",
                      "anchor"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "orphaned": {
                        "type": "boolean",
                        "const": true
                      },
                      "reason": {
                        "type": "string",
                        "enum": [
                          "slide removed",
                          "block removed",
                          "text removed",
                          "path missing",
                          "cell missing",
                          "range outside"
                        ]
                      },
                      "anchor": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "deck"
                              }
                            },
                            "required": [
                              "kind"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "slide"
                              },
                              "slideId": {
                                "type": "string",
                                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                              }
                            },
                            "required": [
                              "kind",
                              "slideId"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "block"
                              },
                              "slideId": {
                                "type": "string",
                                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                              },
                              "blockId": {
                                "type": "string",
                                "pattern": "^[a-z0-9][a-z0-9-]*$"
                              }
                            },
                            "required": [
                              "kind",
                              "slideId",
                              "blockId"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "text"
                              },
                              "slideId": {
                                "type": "string",
                                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                              },
                              "blockId": {
                                "type": "string",
                                "pattern": "^[a-z0-9][a-z0-9-]*$"
                              },
                              "path": {
                                "type": "string",
                                "pattern": "^\\/.+"
                              },
                              "range": {
                                "type": "array",
                                "prefixItems": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  }
                                ],
                                "items": false,
                                "minItems": 2,
                                "maxItems": 2
                              },
                              "quoted": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "slideId",
                              "blockId",
                              "path",
                              "range",
                              "quoted"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "cell"
                              },
                              "slideId": {
                                "type": "string",
                                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                              },
                              "blockId": {
                                "type": "string",
                                "pattern": "^[a-z0-9][a-z0-9-]*$"
                              },
                              "cell": {
                                "type": "array",
                                "prefixItems": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  }
                                ],
                                "items": false,
                                "minItems": 2,
                                "maxItems": 2
                              }
                            },
                            "required": [
                              "kind",
                              "slideId",
                              "blockId",
                              "cell"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "notes"
                              },
                              "slideId": {
                                "type": "string",
                                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                              }
                            },
                            "required": [
                              "kind",
                              "slideId"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      },
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      }
                    },
                    "required": [
                      "orphaned",
                      "reason",
                      "anchor"
                    ],
                    "additionalProperties": false
                  }
                ],
                "description": "Where the anchor lands on the document now"
              }
            },
            "required": [
              "id",
              "deckId",
              "anchor",
              "comment",
              "replies",
              "createdAt",
              "updatedAt",
              "revision",
              "placement"
            ],
            "additionalProperties": false
          },
          "commentsRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The comments revision after the write, the number comment.list { since } takes"
          }
        },
        "required": [
          "thread",
          "commentsRevision"
        ],
        "additionalProperties": false
      },
      "CommentLinkInput": {
        "$id": "#/components/schemas/CommentLinkInput",
        "type": "object",
        "properties": {
          "threadId": {
            "type": "string",
            "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
          }
        },
        "required": [
          "threadId"
        ],
        "additionalProperties": false
      },
      "CommentLinkOutput": {
        "$id": "#/components/schemas/CommentLinkOutput",
        "type": "object",
        "properties": {
          "url": {
            "type": "string"
          },
          "viewUrl": {
            "type": "string"
          }
        },
        "required": [
          "url",
          "viewUrl"
        ],
        "additionalProperties": false
      },
      "NotificationListInput": {
        "$id": "#/components/schemas/NotificationListInput",
        "type": "object",
        "properties": {
          "unread": {
            "description": "Unread records only",
            "type": "boolean"
          },
          "since": {
            "description": "An ISO time; records updated after it",
            "type": "string"
          },
          "limit": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 500
          }
        },
        "additionalProperties": false
      },
      "NotificationListOutput": {
        "$id": "#/components/schemas/NotificationListOutput",
        "type": "object",
        "properties": {
          "notifications": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1
                },
                "principalId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "mention",
                    "reply",
                    "assigned",
                    "resolved",
                    "reopened",
                    "reaction",
                    "accessRequest",
                    "granted",
                    "versionNamed",
                    "comment"
                  ]
                },
                "deckId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "threadId": {
                  "type": "string",
                  "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                },
                "slideId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "actors": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "count": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "createdAt": {
                  "type": "string"
                },
                "updatedAt": {
                  "type": "string"
                },
                "readAt": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "principalId",
                "kind",
                "deckId",
                "actors",
                "count",
                "createdAt",
                "updatedAt"
              ],
              "additionalProperties": false
            }
          },
          "unread": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "notifications",
          "unread"
        ],
        "additionalProperties": false
      },
      "NotificationMarkReadInput": {
        "$id": "#/components/schemas/NotificationMarkReadInput",
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "all": {
            "type": "boolean",
            "const": true
          }
        },
        "additionalProperties": false
      },
      "NotificationMarkReadOutput": {
        "$id": "#/components/schemas/NotificationMarkReadOutput",
        "type": "object",
        "properties": {
          "unread": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "unread"
        ],
        "additionalProperties": false
      },
      "NotificationSettingsInput": {
        "$id": "#/components/schemas/NotificationSettingsInput",
        "type": "object",
        "properties": {
          "level": {
            "type": "string",
            "enum": [
              "all",
              "forYou",
              "none"
            ]
          },
          "email": {
            "type": "boolean"
          },
          "activityForCommenters": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "NotificationSettingsOutput": {
        "$id": "#/components/schemas/NotificationSettingsOutput",
        "type": "object",
        "properties": {
          "level": {
            "type": "string",
            "enum": [
              "all",
              "forYou",
              "none"
            ]
          },
          "email": {
            "type": "boolean",
            "description": "Email digests for a signed in grant holder"
          },
          "activityForCommenters": {
            "type": "boolean",
            "description": "The owner lets commenters read the Activity panel (SPEC-3 5.7)"
          }
        },
        "required": [
          "level",
          "email",
          "activityForCommenters"
        ],
        "additionalProperties": false
      },
      "ActivityListInput": {
        "$id": "#/components/schemas/ActivityListInput",
        "type": "object",
        "properties": {
          "since": {
            "description": "An ISO time",
            "type": "string"
          },
          "kinds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "version",
                "comment",
                "share",
                "request",
                "role",
                "rename",
                "restore",
                "named",
                "export",
                "import",
                "trash"
              ]
            }
          },
          "limit": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 1000
          }
        },
        "additionalProperties": false
      },
      "ActivityListOutput": {
        "$id": "#/components/schemas/ActivityListOutput",
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1
                },
                "at": {
                  "type": "string"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "version",
                    "comment",
                    "share",
                    "request",
                    "role",
                    "rename",
                    "restore",
                    "named",
                    "export",
                    "import",
                    "trash"
                  ]
                },
                "actor": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                },
                "deckId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "slideId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "threadId": {
                  "type": "string",
                  "pattern": "^[0-9a-hjkmnp-tv-z]{26}$"
                },
                "revision": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "summary": {
                  "type": "string"
                },
                "data": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {}
                }
              },
              "required": [
                "id",
                "at",
                "kind",
                "deckId",
                "summary"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "events"
        ],
        "additionalProperties": false
      },
      "VersionDiffInput": {
        "$id": "#/components/schemas/VersionDiffInput",
        "type": "object",
        "properties": {
          "from": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "to": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "staged": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "VersionDiffOutput": {
        "$id": "#/components/schemas/VersionDiffOutput",
        "type": "object",
        "properties": {
          "from": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "to": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "mutations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Mutation"
            }
          },
          "byAuthor": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "author": {
                  "$ref": "#/components/schemas/Author"
                },
                "blocks": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "slideId": {
                        "type": "string",
                        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                      },
                      "blockId": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9-]*$"
                      },
                      "ops": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "slide.insert",
                            "slide.remove",
                            "slide.move",
                            "slide.set",
                            "slide.replace",
                            "block.insert",
                            "block.remove",
                            "block.move",
                            "block.set",
                            "text.replace",
                            "text.splice",
                            "text.mark",
                            "section.set",
                            "asset.set",
                            "asset.remove",
                            "deck.set",
                            "version.restore"
                          ]
                        }
                      }
                    },
                    "required": [
                      "slideId",
                      "ops"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "author",
                "blocks"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "from",
          "to",
          "mutations",
          "byAuthor"
        ],
        "additionalProperties": false
      },
      "ShareGetInput": {
        "$id": "#/components/schemas/ShareGetInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "ShareGetOutput": {
        "$id": "#/components/schemas/ShareGetOutput",
        "type": "object",
        "properties": {
          "record": {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "deckId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "owner": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pendingOwner": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "principalId": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "email": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "email",
                            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "askedAt": {
                        "type": "string"
                      },
                      "askedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "principalId",
                      "email",
                      "askedAt",
                      "askedBy"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {
                "type": "string"
              },
              "createdBy": {
                "type": "string",
                "minLength": 1
              },
              "assetKey": {
                "type": "string",
                "pattern": "^[A-Za-z0-9_-]{22}$"
              },
              "generalAccess": {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "enum": [
                      "restricted",
                      "link",
                      "open"
                    ]
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "viewer",
                      "commenter",
                      "editor"
                    ]
                  }
                },
                "required": [
                  "mode",
                  "role"
                ],
                "additionalProperties": false
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^lnk_[A-Za-z0-9_-]{6,64}$"
                    },
                    "hash": {
                      "type": "string",
                      "pattern": "^sha256:[0-9a-f]{64}$"
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "createdBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "revokedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "label": {
                      "type": "string",
                      "maxLength": 120
                    },
                    "useCount": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "id",
                    "hash",
                    "role",
                    "createdAt",
                    "createdBy",
                    "revokedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "publish": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "hash": {
                        "type": "string",
                        "pattern": "^sha256:[0-9a-f]{64}$"
                      },
                      "publishedAt": {
                        "type": "string"
                      },
                      "publishedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "revokedAt": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "hash",
                      "publishedAt",
                      "publishedBy",
                      "revokedAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "grants": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "invitedBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "invitedAt": {
                      "type": "string"
                    },
                    "acceptedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    }
                  },
                  "required": [
                    "principalId",
                    "email",
                    "role",
                    "invitedBy",
                    "invitedAt",
                    "acceptedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "requests": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^req_[A-Za-z0-9_-]{6,64}$"
                    },
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    },
                    "askedAt": {
                      "type": "string"
                    },
                    "respondedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "principalId",
                    "email",
                    "role",
                    "askedAt",
                    "respondedAt"
                  ],
                  "additionalProperties": false
                }
              },
              "settings": {
                "type": "object",
                "properties": {
                  "editorsCanShare": {
                    "type": "boolean"
                  },
                  "viewersCanDownload": {
                    "type": "boolean"
                  },
                  "viewersCanSeeComments": {
                    "type": "boolean"
                  },
                  "showNamesToLinkVisitors": {
                    "type": "boolean"
                  },
                  "allowHtmlBlocks": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "editorsCanShare",
                  "viewersCanDownload",
                  "viewersCanSeeComments",
                  "showNamesToLinkVisitors",
                  "allowHtmlBlocks"
                ],
                "additionalProperties": false
              },
              "revision": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "deckId",
              "owner",
              "generalAccess"
            ],
            "additionalProperties": false,
            "description": "The whole record for share holders; owner, generalAccess and the own grant for a viewer"
          },
          "role": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "viewer",
                  "commenter",
                  "editor",
                  "owner"
                ]
              },
              {
                "type": "null"
              }
            ],
            "description": "The caller's role, null without access"
          },
          "via": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "owner",
                  "grant",
                  "link",
                  "open",
                  "publish",
                  "admin",
                  "agent"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "read",
                "readSkipped",
                "readNotes",
                "readComments",
                "comment",
                "write",
                "history",
                "export",
                "exportNotes",
                "share",
                "settings",
                "rename",
                "copy",
                "trash",
                "restore",
                "remove",
                "publish",
                "transfer",
                "presence",
                "follow"
              ]
            }
          }
        },
        "required": [
          "record",
          "role",
          "via",
          "capabilities"
        ],
        "additionalProperties": false
      },
      "ShareSetGeneralAccessInput": {
        "$id": "#/components/schemas/ShareSetGeneralAccessInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "mode": {
            "type": "string",
            "enum": [
              "restricted",
              "link"
            ]
          },
          "role": {
            "description": "viewer unless set",
            "type": "string",
            "enum": [
              "viewer",
              "commenter",
              "editor"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The access record’s revision the caller read"
          }
        },
        "required": [
          "id",
          "mode",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareSetGeneralAccessOutput": {
        "$id": "#/components/schemas/ShareSetGeneralAccessOutput",
        "type": "object",
        "properties": {
          "record": {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "deckId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "owner": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pendingOwner": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "principalId": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "email": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "email",
                            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "askedAt": {
                        "type": "string"
                      },
                      "askedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "principalId",
                      "email",
                      "askedAt",
                      "askedBy"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {
                "type": "string"
              },
              "createdBy": {
                "type": "string",
                "minLength": 1
              },
              "assetKey": {
                "type": "string",
                "pattern": "^[A-Za-z0-9_-]{22}$"
              },
              "generalAccess": {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "enum": [
                      "restricted",
                      "link",
                      "open"
                    ]
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "viewer",
                      "commenter",
                      "editor"
                    ]
                  }
                },
                "required": [
                  "mode",
                  "role"
                ],
                "additionalProperties": false
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^lnk_[A-Za-z0-9_-]{6,64}$"
                    },
                    "hash": {
                      "type": "string",
                      "pattern": "^sha256:[0-9a-f]{64}$"
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "createdBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "revokedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "label": {
                      "type": "string",
                      "maxLength": 120
                    },
                    "useCount": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "id",
                    "hash",
                    "role",
                    "createdAt",
                    "createdBy",
                    "revokedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "publish": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "hash": {
                        "type": "string",
                        "pattern": "^sha256:[0-9a-f]{64}$"
                      },
                      "publishedAt": {
                        "type": "string"
                      },
                      "publishedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "revokedAt": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "hash",
                      "publishedAt",
                      "publishedBy",
                      "revokedAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "grants": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "invitedBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "invitedAt": {
                      "type": "string"
                    },
                    "acceptedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    }
                  },
                  "required": [
                    "principalId",
                    "email",
                    "role",
                    "invitedBy",
                    "invitedAt",
                    "acceptedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "requests": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^req_[A-Za-z0-9_-]{6,64}$"
                    },
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    },
                    "askedAt": {
                      "type": "string"
                    },
                    "respondedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "principalId",
                    "email",
                    "role",
                    "askedAt",
                    "respondedAt"
                  ],
                  "additionalProperties": false
                }
              },
              "settings": {
                "type": "object",
                "properties": {
                  "editorsCanShare": {
                    "type": "boolean"
                  },
                  "viewersCanDownload": {
                    "type": "boolean"
                  },
                  "viewersCanSeeComments": {
                    "type": "boolean"
                  },
                  "showNamesToLinkVisitors": {
                    "type": "boolean"
                  },
                  "allowHtmlBlocks": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "editorsCanShare",
                  "viewersCanDownload",
                  "viewersCanSeeComments",
                  "showNamesToLinkVisitors",
                  "allowHtmlBlocks"
                ],
                "additionalProperties": false
              },
              "revision": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "schemaVersion",
              "deckId",
              "owner",
              "pendingOwner",
              "createdAt",
              "createdBy",
              "assetKey",
              "generalAccess",
              "links",
              "publish",
              "grants",
              "requests",
              "settings",
              "revision"
            ],
            "additionalProperties": false
          },
          "url": {
            "description": "The /s/<token> URL of the new link, shown once",
            "type": "string"
          }
        },
        "required": [
          "record"
        ],
        "additionalProperties": false
      },
      "ShareCreateLinkInput": {
        "$id": "#/components/schemas/ShareCreateLinkInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "role": {
            "type": "string",
            "enum": [
              "viewer",
              "commenter",
              "editor"
            ]
          },
          "label": {
            "type": "string",
            "maxLength": 120
          },
          "expiresAt": {
            "description": "An ISO time, or 7d, 30d, 90d on the CLI; no expiry when absent",
            "type": "string"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "role",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareCreateLinkOutput": {
        "$id": "#/components/schemas/ShareCreateLinkOutput",
        "type": "object",
        "properties": {
          "record": {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "deckId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "owner": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pendingOwner": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "principalId": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "email": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "email",
                            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "askedAt": {
                        "type": "string"
                      },
                      "askedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "principalId",
                      "email",
                      "askedAt",
                      "askedBy"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {
                "type": "string"
              },
              "createdBy": {
                "type": "string",
                "minLength": 1
              },
              "assetKey": {
                "type": "string",
                "pattern": "^[A-Za-z0-9_-]{22}$"
              },
              "generalAccess": {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "enum": [
                      "restricted",
                      "link",
                      "open"
                    ]
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "viewer",
                      "commenter",
                      "editor"
                    ]
                  }
                },
                "required": [
                  "mode",
                  "role"
                ],
                "additionalProperties": false
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^lnk_[A-Za-z0-9_-]{6,64}$"
                    },
                    "hash": {
                      "type": "string",
                      "pattern": "^sha256:[0-9a-f]{64}$"
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "createdBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "revokedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "label": {
                      "type": "string",
                      "maxLength": 120
                    },
                    "useCount": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "id",
                    "hash",
                    "role",
                    "createdAt",
                    "createdBy",
                    "revokedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "publish": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "hash": {
                        "type": "string",
                        "pattern": "^sha256:[0-9a-f]{64}$"
                      },
                      "publishedAt": {
                        "type": "string"
                      },
                      "publishedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "revokedAt": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "hash",
                      "publishedAt",
                      "publishedBy",
                      "revokedAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "grants": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "invitedBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "invitedAt": {
                      "type": "string"
                    },
                    "acceptedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    }
                  },
                  "required": [
                    "principalId",
                    "email",
                    "role",
                    "invitedBy",
                    "invitedAt",
                    "acceptedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "requests": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^req_[A-Za-z0-9_-]{6,64}$"
                    },
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    },
                    "askedAt": {
                      "type": "string"
                    },
                    "respondedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "principalId",
                    "email",
                    "role",
                    "askedAt",
                    "respondedAt"
                  ],
                  "additionalProperties": false
                }
              },
              "settings": {
                "type": "object",
                "properties": {
                  "editorsCanShare": {
                    "type": "boolean"
                  },
                  "viewersCanDownload": {
                    "type": "boolean"
                  },
                  "viewersCanSeeComments": {
                    "type": "boolean"
                  },
                  "showNamesToLinkVisitors": {
                    "type": "boolean"
                  },
                  "allowHtmlBlocks": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "editorsCanShare",
                  "viewersCanDownload",
                  "viewersCanSeeComments",
                  "showNamesToLinkVisitors",
                  "allowHtmlBlocks"
                ],
                "additionalProperties": false
              },
              "revision": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "schemaVersion",
              "deckId",
              "owner",
              "pendingOwner",
              "createdAt",
              "createdBy",
              "assetKey",
              "generalAccess",
              "links",
              "publish",
              "grants",
              "requests",
              "settings",
              "revision"
            ],
            "additionalProperties": false
          },
          "link": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "role": {
                "type": "string",
                "enum": [
                  "viewer",
                  "commenter",
                  "editor"
                ]
              },
              "label": {
                "type": "string"
              },
              "createdAt": {
                "type": "string"
              },
              "expiresAt": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "id",
              "role",
              "createdAt",
              "expiresAt"
            ],
            "additionalProperties": false
          },
          "url": {
            "type": "string",
            "description": "The /s/<token> URL, shown once"
          }
        },
        "required": [
          "record",
          "link",
          "url"
        ],
        "additionalProperties": false
      },
      "ShareRevokeLinkInput": {
        "$id": "#/components/schemas/ShareRevokeLinkInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "linkId": {
            "type": "string",
            "minLength": 1
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "linkId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareRevokeLinkOutput": {
        "$id": "#/components/schemas/ShareRevokeLinkOutput",
        "type": "object",
        "properties": {
          "record": {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "deckId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "owner": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pendingOwner": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "principalId": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "email": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "email",
                            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "askedAt": {
                        "type": "string"
                      },
                      "askedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "principalId",
                      "email",
                      "askedAt",
                      "askedBy"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {
                "type": "string"
              },
              "createdBy": {
                "type": "string",
                "minLength": 1
              },
              "assetKey": {
                "type": "string",
                "pattern": "^[A-Za-z0-9_-]{22}$"
              },
              "generalAccess": {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "enum": [
                      "restricted",
                      "link",
                      "open"
                    ]
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "viewer",
                      "commenter",
                      "editor"
                    ]
                  }
                },
                "required": [
                  "mode",
                  "role"
                ],
                "additionalProperties": false
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^lnk_[A-Za-z0-9_-]{6,64}$"
                    },
                    "hash": {
                      "type": "string",
                      "pattern": "^sha256:[0-9a-f]{64}$"
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "createdBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "revokedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "label": {
                      "type": "string",
                      "maxLength": 120
                    },
                    "useCount": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "id",
                    "hash",
                    "role",
                    "createdAt",
                    "createdBy",
                    "revokedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "publish": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "hash": {
                        "type": "string",
                        "pattern": "^sha256:[0-9a-f]{64}$"
                      },
                      "publishedAt": {
                        "type": "string"
                      },
                      "publishedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "revokedAt": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "hash",
                      "publishedAt",
                      "publishedBy",
                      "revokedAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "grants": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "invitedBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "invitedAt": {
                      "type": "string"
                    },
                    "acceptedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    }
                  },
                  "required": [
                    "principalId",
                    "email",
                    "role",
                    "invitedBy",
                    "invitedAt",
                    "acceptedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "requests": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^req_[A-Za-z0-9_-]{6,64}$"
                    },
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    },
                    "askedAt": {
                      "type": "string"
                    },
                    "respondedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "principalId",
                    "email",
                    "role",
                    "askedAt",
                    "respondedAt"
                  ],
                  "additionalProperties": false
                }
              },
              "settings": {
                "type": "object",
                "properties": {
                  "editorsCanShare": {
                    "type": "boolean"
                  },
                  "viewersCanDownload": {
                    "type": "boolean"
                  },
                  "viewersCanSeeComments": {
                    "type": "boolean"
                  },
                  "showNamesToLinkVisitors": {
                    "type": "boolean"
                  },
                  "allowHtmlBlocks": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "editorsCanShare",
                  "viewersCanDownload",
                  "viewersCanSeeComments",
                  "showNamesToLinkVisitors",
                  "allowHtmlBlocks"
                ],
                "additionalProperties": false
              },
              "revision": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "schemaVersion",
              "deckId",
              "owner",
              "pendingOwner",
              "createdAt",
              "createdBy",
              "assetKey",
              "generalAccess",
              "links",
              "publish",
              "grants",
              "requests",
              "settings",
              "revision"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "record"
        ],
        "additionalProperties": false
      },
      "ShareRotateLinkInput": {
        "$id": "#/components/schemas/ShareRotateLinkInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "linkId": {
            "type": "string",
            "minLength": 1
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "linkId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareStopInput": {
        "$id": "#/components/schemas/ShareStopInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareInviteInput": {
        "$id": "#/components/schemas/ShareInviteInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "emails": {
            "minItems": 1,
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "string",
              "format": "email",
              "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
            }
          },
          "role": {
            "type": "string",
            "enum": [
              "viewer",
              "commenter",
              "editor"
            ]
          },
          "message": {
            "type": "string",
            "maxLength": 600
          },
          "notify": {
            "description": "Send the invitation mail; on unless set",
            "type": "boolean"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "emails",
          "role",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareInviteOutput": {
        "$id": "#/components/schemas/ShareInviteOutput",
        "type": "object",
        "properties": {
          "record": {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "deckId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "owner": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pendingOwner": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "principalId": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "email": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "email",
                            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "askedAt": {
                        "type": "string"
                      },
                      "askedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "principalId",
                      "email",
                      "askedAt",
                      "askedBy"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {
                "type": "string"
              },
              "createdBy": {
                "type": "string",
                "minLength": 1
              },
              "assetKey": {
                "type": "string",
                "pattern": "^[A-Za-z0-9_-]{22}$"
              },
              "generalAccess": {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "enum": [
                      "restricted",
                      "link",
                      "open"
                    ]
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "viewer",
                      "commenter",
                      "editor"
                    ]
                  }
                },
                "required": [
                  "mode",
                  "role"
                ],
                "additionalProperties": false
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^lnk_[A-Za-z0-9_-]{6,64}$"
                    },
                    "hash": {
                      "type": "string",
                      "pattern": "^sha256:[0-9a-f]{64}$"
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "createdBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "revokedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "label": {
                      "type": "string",
                      "maxLength": 120
                    },
                    "useCount": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "id",
                    "hash",
                    "role",
                    "createdAt",
                    "createdBy",
                    "revokedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "publish": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "hash": {
                        "type": "string",
                        "pattern": "^sha256:[0-9a-f]{64}$"
                      },
                      "publishedAt": {
                        "type": "string"
                      },
                      "publishedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "revokedAt": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "hash",
                      "publishedAt",
                      "publishedBy",
                      "revokedAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "grants": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "invitedBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "invitedAt": {
                      "type": "string"
                    },
                    "acceptedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    }
                  },
                  "required": [
                    "principalId",
                    "email",
                    "role",
                    "invitedBy",
                    "invitedAt",
                    "acceptedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "requests": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^req_[A-Za-z0-9_-]{6,64}$"
                    },
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    },
                    "askedAt": {
                      "type": "string"
                    },
                    "respondedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "principalId",
                    "email",
                    "role",
                    "askedAt",
                    "respondedAt"
                  ],
                  "additionalProperties": false
                }
              },
              "settings": {
                "type": "object",
                "properties": {
                  "editorsCanShare": {
                    "type": "boolean"
                  },
                  "viewersCanDownload": {
                    "type": "boolean"
                  },
                  "viewersCanSeeComments": {
                    "type": "boolean"
                  },
                  "showNamesToLinkVisitors": {
                    "type": "boolean"
                  },
                  "allowHtmlBlocks": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "editorsCanShare",
                  "viewersCanDownload",
                  "viewersCanSeeComments",
                  "showNamesToLinkVisitors",
                  "allowHtmlBlocks"
                ],
                "additionalProperties": false
              },
              "revision": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "schemaVersion",
              "deckId",
              "owner",
              "pendingOwner",
              "createdAt",
              "createdBy",
              "assetKey",
              "generalAccess",
              "links",
              "publish",
              "grants",
              "requests",
              "settings",
              "revision"
            ],
            "additionalProperties": false
          },
          "invited": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "email": {
                  "type": "string",
                  "format": "email",
                  "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "sent",
                    "queued",
                    "no-mail"
                  ]
                }
              },
              "required": [
                "email",
                "status"
              ],
              "additionalProperties": false
            }
          },
          "url": {
            "type": "string",
            "description": "The deck link for hand delivery, without a token"
          }
        },
        "required": [
          "record",
          "invited",
          "url"
        ],
        "additionalProperties": false
      },
      "ShareSetRoleInput": {
        "$id": "#/components/schemas/ShareSetRoleInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "who": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "principalId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "principalId"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  }
                },
                "required": [
                  "email"
                ],
                "additionalProperties": false
              }
            ]
          },
          "role": {
            "type": "string",
            "enum": [
              "viewer",
              "commenter",
              "editor"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "who",
          "role",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareRemoveInput": {
        "$id": "#/components/schemas/ShareRemoveInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "who": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "principalId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "principalId"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  }
                },
                "required": [
                  "email"
                ],
                "additionalProperties": false
              }
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "who",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareSetExpiryInput": {
        "$id": "#/components/schemas/ShareSetExpiryInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "who": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "principalId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "principalId"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  }
                },
                "required": [
                  "email"
                ],
                "additionalProperties": false
              }
            ]
          },
          "expiresAt": {
            "description": "An ISO time within a year, or null to clear",
            "type": [
              "string",
              "null"
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "who",
          "expiresAt",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareSettingsInput": {
        "$id": "#/components/schemas/ShareSettingsInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "editorsCanShare": {
            "type": "boolean"
          },
          "viewersCanDownload": {
            "type": "boolean"
          },
          "viewersCanSeeComments": {
            "type": "boolean"
          },
          "showNamesToLinkVisitors": {
            "type": "boolean"
          },
          "allowHtmlBlocks": {
            "type": "boolean"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareRequestAccessInput": {
        "$id": "#/components/schemas/ShareRequestAccessInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "role": {
            "type": "string",
            "enum": [
              "viewer",
              "commenter",
              "editor"
            ]
          },
          "message": {
            "type": "string",
            "maxLength": 600
          },
          "email": {
            "description": "Required for anonymous callers",
            "type": "string",
            "format": "email",
            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          }
        },
        "required": [
          "id",
          "role"
        ],
        "additionalProperties": false
      },
      "ShareRequestAccessOutput": {
        "$id": "#/components/schemas/ShareRequestAccessOutput",
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean",
            "const": true
          },
          "message": {
            "type": "string",
            "const": "If this presentation exists, its owner has been asked."
          }
        },
        "required": [
          "ok",
          "message"
        ],
        "additionalProperties": false
      },
      "ShareListRequestsInput": {
        "$id": "#/components/schemas/ShareListRequestsInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "ShareListRequestsOutput": {
        "$id": "#/components/schemas/ShareListRequestsOutput",
        "type": "object",
        "properties": {
          "requests": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^req_[A-Za-z0-9_-]{6,64}$"
                },
                "principalId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "email": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "email",
                      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "viewer",
                    "commenter",
                    "editor"
                  ]
                },
                "message": {
                  "type": "string",
                  "maxLength": 600
                },
                "askedAt": {
                  "type": "string"
                },
                "respondedAt": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "label": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "principalId",
                "email",
                "role",
                "askedAt",
                "respondedAt"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "requests"
        ],
        "additionalProperties": false
      },
      "ShareRespondInput": {
        "$id": "#/components/schemas/ShareRespondInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "requestId": {
            "type": "string",
            "minLength": 1
          },
          "grant": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "viewer",
                  "commenter",
                  "editor"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "notify": {
            "type": "boolean"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "requestId",
          "grant",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareTransferOwnershipInput": {
        "$id": "#/components/schemas/ShareTransferOwnershipInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "to": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "principalId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "principalId"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  }
                },
                "required": [
                  "email"
                ],
                "additionalProperties": false
              }
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "to",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareAcceptOwnershipInput": {
        "$id": "#/components/schemas/ShareAcceptOwnershipInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareDeclineOwnershipInput": {
        "$id": "#/components/schemas/ShareDeclineOwnershipInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareClaimInput": {
        "$id": "#/components/schemas/ShareClaimInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareEmailCollaboratorsInput": {
        "$id": "#/components/schemas/ShareEmailCollaboratorsInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "to": {
            "anyOf": [
              {
                "type": "string",
                "const": "all"
              },
              {
                "type": "object",
                "properties": {
                  "principalIds": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  }
                },
                "required": [
                  "principalIds"
                ],
                "additionalProperties": false
              }
            ]
          },
          "message": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "to",
          "message",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "ShareEmailCollaboratorsOutput": {
        "$id": "#/components/schemas/ShareEmailCollaboratorsOutput",
        "type": "object",
        "properties": {
          "sent": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "sent"
        ],
        "additionalProperties": false
      },
      "DeckPublishInput": {
        "$id": "#/components/schemas/DeckPublishInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "DeckPublishOutput": {
        "$id": "#/components/schemas/DeckPublishOutput",
        "type": "object",
        "properties": {
          "record": {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "deckId": {
                "type": "string",
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
              },
              "owner": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pendingOwner": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "principalId": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "email": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "email",
                            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "askedAt": {
                        "type": "string"
                      },
                      "askedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "required": [
                      "principalId",
                      "email",
                      "askedAt",
                      "askedBy"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {
                "type": "string"
              },
              "createdBy": {
                "type": "string",
                "minLength": 1
              },
              "assetKey": {
                "type": "string",
                "pattern": "^[A-Za-z0-9_-]{22}$"
              },
              "generalAccess": {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "enum": [
                      "restricted",
                      "link",
                      "open"
                    ]
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "viewer",
                      "commenter",
                      "editor"
                    ]
                  }
                },
                "required": [
                  "mode",
                  "role"
                ],
                "additionalProperties": false
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^lnk_[A-Za-z0-9_-]{6,64}$"
                    },
                    "hash": {
                      "type": "string",
                      "pattern": "^sha256:[0-9a-f]{64}$"
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "createdBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "revokedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "label": {
                      "type": "string",
                      "maxLength": 120
                    },
                    "useCount": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "id",
                    "hash",
                    "role",
                    "createdAt",
                    "createdBy",
                    "revokedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "publish": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "hash": {
                        "type": "string",
                        "pattern": "^sha256:[0-9a-f]{64}$"
                      },
                      "publishedAt": {
                        "type": "string"
                      },
                      "publishedBy": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "revokedAt": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "hash",
                      "publishedAt",
                      "publishedBy",
                      "revokedAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "grants": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "invitedBy": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "invitedAt": {
                      "type": "string"
                    },
                    "acceptedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "expiresAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    }
                  },
                  "required": [
                    "principalId",
                    "email",
                    "role",
                    "invitedBy",
                    "invitedAt",
                    "acceptedAt",
                    "expiresAt"
                  ],
                  "additionalProperties": false
                }
              },
              "requests": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^req_[A-Za-z0-9_-]{6,64}$"
                    },
                    "principalId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "viewer",
                        "commenter",
                        "editor"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "maxLength": 600
                    },
                    "askedAt": {
                      "type": "string"
                    },
                    "respondedAt": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "principalId",
                    "email",
                    "role",
                    "askedAt",
                    "respondedAt"
                  ],
                  "additionalProperties": false
                }
              },
              "settings": {
                "type": "object",
                "properties": {
                  "editorsCanShare": {
                    "type": "boolean"
                  },
                  "viewersCanDownload": {
                    "type": "boolean"
                  },
                  "viewersCanSeeComments": {
                    "type": "boolean"
                  },
                  "showNamesToLinkVisitors": {
                    "type": "boolean"
                  },
                  "allowHtmlBlocks": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "editorsCanShare",
                  "viewersCanDownload",
                  "viewersCanSeeComments",
                  "showNamesToLinkVisitors",
                  "allowHtmlBlocks"
                ],
                "additionalProperties": false
              },
              "revision": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "schemaVersion",
              "deckId",
              "owner",
              "pendingOwner",
              "createdAt",
              "createdBy",
              "assetKey",
              "generalAccess",
              "links",
              "publish",
              "grants",
              "requests",
              "settings",
              "revision"
            ],
            "additionalProperties": false
          },
          "url": {
            "type": "string",
            "description": "/deck/<id>?p=<token>&present=1, shown once"
          },
          "embed": {
            "type": "string",
            "description": "/embed/<id>?p=<token>, shown once"
          }
        },
        "required": [
          "record",
          "url",
          "embed"
        ],
        "additionalProperties": false
      },
      "DeckUnpublishInput": {
        "$id": "#/components/schemas/DeckUnpublishInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "AccountDecksInput": {
        "$id": "#/components/schemas/AccountDecksInput",
        "type": "object",
        "properties": {
          "view": {
            "type": "string",
            "enum": [
              "owned",
              "shared",
              "recent",
              "trash",
              "all"
            ]
          }
        },
        "required": [
          "view"
        ],
        "additionalProperties": false
      },
      "AccountDecksOutput": {
        "$id": "#/components/schemas/AccountDecksOutput",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "title": {
              "type": "string"
            },
            "slides": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "sections": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "revision": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "updatedAt": {
              "type": "string"
            },
            "createdAt": {
              "type": "string"
            },
            "trashedAt": {
              "type": "string"
            },
            "owner": {
              "type": [
                "string",
                "null"
              ]
            },
            "role": {
              "type": "string",
              "enum": [
                "viewer",
                "commenter",
                "editor",
                "owner"
              ]
            }
          },
          "required": [
            "id",
            "title",
            "slides",
            "sections",
            "revision",
            "updatedAt",
            "createdAt"
          ],
          "additionalProperties": false
        }
      },
      "AccountTokensCreateInput": {
        "$id": "#/components/schemas/AccountTokensCreateInput",
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "scopes": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "read",
                "comment",
                "write",
                "export",
                "share",
                "admin"
              ]
            }
          },
          "expiresAt": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "scopes"
        ],
        "additionalProperties": false
      },
      "AccountTokensCreateOutput": {
        "$id": "#/components/schemas/AccountTokensCreateOutput",
        "type": "object",
        "properties": {
          "token": {
            "type": "object",
            "properties": {
              "tokenId": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string"
              },
              "scopes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "read",
                    "comment",
                    "write",
                    "export",
                    "share",
                    "admin"
                  ]
                }
              },
              "createdAt": {
                "type": "string"
              },
              "expiresAt": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "lastUsedAt": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "tokenId",
              "name",
              "scopes",
              "createdAt",
              "expiresAt",
              "lastUsedAt"
            ],
            "additionalProperties": false
          },
          "secret": {
            "type": "string",
            "description": "The ts_ key, shown once"
          }
        },
        "required": [
          "token",
          "secret"
        ],
        "additionalProperties": false
      },
      "AccountTokensListOutput": {
        "$id": "#/components/schemas/AccountTokensListOutput",
        "type": "object",
        "properties": {
          "tokens": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "tokenId": {
                  "type": "string",
                  "minLength": 1
                },
                "name": {
                  "type": "string"
                },
                "scopes": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "read",
                      "comment",
                      "write",
                      "export",
                      "share",
                      "admin"
                    ]
                  }
                },
                "createdAt": {
                  "type": "string"
                },
                "expiresAt": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "lastUsedAt": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "tokenId",
                "name",
                "scopes",
                "createdAt",
                "expiresAt",
                "lastUsedAt"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "tokens"
        ],
        "additionalProperties": false
      },
      "AccountTokensRevokeInput": {
        "$id": "#/components/schemas/AccountTokensRevokeInput",
        "type": "object",
        "properties": {
          "tokenId": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "tokenId"
        ],
        "additionalProperties": false
      },
      "AccountTokensRevokeOutput": {
        "$id": "#/components/schemas/AccountTokensRevokeOutput",
        "type": "object",
        "properties": {
          "tokenId": {
            "type": "string"
          },
          "revoked": {
            "type": "boolean",
            "const": true
          },
          "sessionsClosed": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "tokenId",
          "revoked",
          "sessionsClosed"
        ],
        "additionalProperties": false
      },
      "AccountMeInput": {
        "$id": "#/components/schemas/AccountMeInput",
        "type": "object",
        "properties": {
          "avatarPng": {
            "description": "CLI: write the mark as a PNG to this path",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "AccountMeOutput": {
        "$id": "#/components/schemas/AccountMeOutput",
        "type": "object",
        "properties": {
          "principal": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "kind": {
                "type": "string",
                "enum": [
                  "anonymous",
                  "account",
                  "agent",
                  "local"
                ]
              },
              "email": {
                "type": "string",
                "format": "email",
                "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
              },
              "admin": {
                "type": "boolean"
              }
            },
            "required": [
              "id",
              "kind",
              "admin"
            ],
            "additionalProperties": false
          },
          "trust": {
            "type": "string",
            "enum": [
              "label",
              "guest",
              "verified",
              "agent"
            ]
          },
          "label": {
            "type": "string",
            "description": "The generated label or the typed name"
          },
          "name": {
            "description": "The typed display name, when chosen",
            "type": "string"
          },
          "mark": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {},
            "description": "The computed MarkSpec of @turboslide/identity, the same mark a person sees"
          },
          "avatar": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "variant": {
                    "type": "string",
                    "enum": [
                      "initials",
                      "glyph",
                      "dither",
                      "picture"
                    ]
                  },
                  "initials": {
                    "type": "string",
                    "maxLength": 3
                  },
                  "salt": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "url": {
                    "type": "string"
                  }
                },
                "required": [
                  "variant"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "sessions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1
                },
                "createdAt": {
                  "type": "string"
                },
                "lastSeenAt": {
                  "type": "string"
                },
                "current": {
                  "type": "boolean"
                },
                "userAgent": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "createdAt",
                "lastSeenAt",
                "current"
              ],
              "additionalProperties": false
            }
          },
          "avatarPng": {
            "type": "string"
          }
        },
        "required": [
          "principal",
          "trust",
          "label",
          "mark",
          "avatar"
        ],
        "additionalProperties": false
      },
      "AccountSetNameInput": {
        "$id": "#/components/schemas/AccountSetNameInput",
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "AccountSetAvatarInput": {
        "$id": "#/components/schemas/AccountSetAvatarInput",
        "type": "object",
        "properties": {
          "variant": {
            "type": "string",
            "enum": [
              "initials",
              "glyph",
              "dither",
              "picture"
            ]
          },
          "initials": {
            "type": "string",
            "maxLength": 3
          },
          "salt": {
            "description": "Another glyph or plate",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "picture": {
            "description": "A data URL of a JPEG, PNG, WebP or GIF under 512 KB; sharp re-encodes it and keeps no original",
            "type": "string",
            "maxLength": 700000
          }
        },
        "required": [
          "variant"
        ],
        "additionalProperties": false
      },
      "AccountSessionsOutput": {
        "$id": "#/components/schemas/AccountSessionsOutput",
        "type": "object",
        "properties": {
          "sessions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1
                },
                "createdAt": {
                  "type": "string"
                },
                "lastSeenAt": {
                  "type": "string"
                },
                "current": {
                  "type": "boolean"
                },
                "userAgent": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "createdAt",
                "lastSeenAt",
                "current"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "sessions"
        ],
        "additionalProperties": false
      },
      "AccountSignOutInput": {
        "$id": "#/components/schemas/AccountSignOutInput",
        "type": "object",
        "properties": {
          "sessionId": {
            "type": "string",
            "minLength": 1
          },
          "all": {
            "type": "boolean",
            "const": true
          }
        },
        "additionalProperties": false
      },
      "AccountSignOutOutput": {
        "$id": "#/components/schemas/AccountSignOutOutput",
        "type": "object",
        "properties": {
          "signedOut": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "signedOut"
        ],
        "additionalProperties": false
      },
      "AccountForgetOutput": {
        "$id": "#/components/schemas/AccountForgetOutput",
        "type": "object",
        "properties": {
          "principalId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          }
        },
        "required": [
          "principalId"
        ],
        "additionalProperties": false
      },
      "AdminBootstrapInput": {
        "$id": "#/components/schemas/AdminBootstrapInput",
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          }
        },
        "required": [
          "email"
        ],
        "additionalProperties": false
      },
      "AdminBootstrapOutput": {
        "$id": "#/components/schemas/AdminBootstrapOutput",
        "type": "object",
        "properties": {
          "principalId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "tokenOnce": {
            "type": "string"
          }
        },
        "required": [
          "principalId",
          "tokenOnce"
        ],
        "additionalProperties": false
      },
      "AdminAssignOwnerInput": {
        "$id": "#/components/schemas/AdminAssignOwnerInput",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "to": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "principalId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "principalId"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  }
                },
                "required": [
                  "email"
                ],
                "additionalProperties": false
              }
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "id",
          "to",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "AdminFlagInput": {
        "$id": "#/components/schemas/AdminFlagInput",
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "enum": [
              "realtime",
              "presence",
              "comments",
              "invites",
              "email",
              "exports",
              "uploads",
              "renderThumbs",
              "materialize",
              "htmlBlocks",
              "signup",
              "readOnly",
              "assist"
            ]
          },
          "on": {
            "description": "Absent reads the flag",
            "type": "boolean"
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "AdminFlagOutput": {
        "$id": "#/components/schemas/AdminFlagOutput",
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "enum": [
              "realtime",
              "presence",
              "comments",
              "invites",
              "email",
              "exports",
              "uploads",
              "renderThumbs",
              "materialize",
              "htmlBlocks",
              "signup",
              "readOnly",
              "assist"
            ]
          },
          "on": {
            "type": "boolean"
          },
          "default": {
            "type": "boolean",
            "description": "What the flag reads when the store is unreachable"
          },
          "source": {
            "type": "string",
            "enum": [
              "redis",
              "file",
              "default"
            ]
          }
        },
        "required": [
          "name",
          "on",
          "default",
          "source"
        ],
        "additionalProperties": false
      },
      "AdminMigrateStorageInput": {
        "$id": "#/components/schemas/AdminMigrateStorageInput",
        "type": "object",
        "properties": {
          "step": {
            "type": "string",
            "enum": [
              "plan",
              "copy",
              "verify",
              "cutover",
              "delete",
              "rollback"
            ]
          },
          "batch": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 1000
          }
        },
        "required": [
          "step"
        ],
        "additionalProperties": false
      },
      "AdminMigrateStorageOutput": {
        "$id": "#/components/schemas/AdminMigrateStorageOutput",
        "type": "object",
        "properties": {
          "step": {
            "type": "string",
            "enum": [
              "plan",
              "copy",
              "verify",
              "cutover",
              "delete",
              "rollback"
            ]
          },
          "cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "processed": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "verified": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "failed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "done": {
            "type": "boolean"
          },
          "dualRead": {
            "type": "boolean",
            "description": "True while both stores are read"
          }
        },
        "required": [
          "step",
          "cursor",
          "processed",
          "verified",
          "failed",
          "done",
          "dualRead"
        ],
        "additionalProperties": false
      },
      "AdminMailListInput": {
        "$id": "#/components/schemas/AdminMailListInput",
        "type": "object",
        "properties": {
          "since": {
            "type": "string"
          },
          "limit": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 500
          }
        },
        "additionalProperties": false
      },
      "AdminMailListOutput": {
        "$id": "#/components/schemas/AdminMailListOutput",
        "type": "object",
        "properties": {
          "mail": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "to": {
                  "type": "string",
                  "format": "email",
                  "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                },
                "subject": {
                  "type": "string"
                },
                "text": {
                  "type": "string"
                },
                "html": {
                  "type": "string"
                },
                "kind": {
                  "type": "string"
                },
                "sentAt": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "to",
                "subject",
                "text",
                "kind",
                "sentAt"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "mail"
        ],
        "additionalProperties": false
      },
      "PictureDitherInput": {
        "$id": "#/components/schemas/PictureDitherInput",
        "type": "object",
        "properties": {
          "slideId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "blockId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "dither": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "pattern": {
                    "type": "string",
                    "enum": [
                      "bayer8",
                      "bayer4",
                      "blue64",
                      "random"
                    ],
                    "title": "Pattern",
                    "x-inspector": {
                      "label": "Pattern",
                      "control": "select",
                      "snap": [
                        "bayer8",
                        "bayer4",
                        "blue64",
                        "random"
                      ],
                      "group": "Block",
                      "help": "The threshold texture; Bayer 8 by 8 is the deck’s two tone screen."
                    },
                    "description": "The threshold texture; Bayer 8 by 8 is the deck’s two tone screen."
                  },
                  "tone": {
                    "title": "Tone",
                    "x-inspector": {
                      "label": "Tone",
                      "control": "select",
                      "snap": [
                        "two",
                        "three",
                        "original"
                      ],
                      "group": "Block",
                      "help": "Ink and paper (two), three tones with titanium in the middle, or the picture’s own colours posterised (original)."
                    },
                    "description": "Ink and paper (two), three tones with titanium in the middle, or the picture’s own colours posterised (original).",
                    "type": "string",
                    "enum": [
                      "two",
                      "three",
                      "original"
                    ]
                  },
                  "steps": {
                    "title": "Steps",
                    "x-inspector": {
                      "label": "Steps",
                      "control": "number",
                      "snap": [
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                      ],
                      "group": "Block",
                      "help": "The colour steps for the original tone, 2 to 7; 4 unless set."
                    },
                    "description": "The colour steps for the original tone, 2 to 7; 4 unless set.",
                    "type": "integer",
                    "minimum": 2,
                    "maximum": 7
                  },
                  "cell": {
                    "title": "Cell",
                    "x-inspector": {
                      "label": "Cell",
                      "control": "select",
                      "snap": [
                        1,
                        2,
                        3,
                        4
                      ],
                      "group": "Block",
                      "help": "Sheet pixels per cell; 2 is the deck’s cell."
                    },
                    "description": "Sheet pixels per cell; 2 is the deck’s cell.",
                    "type": "number",
                    "enum": [
                      1,
                      2,
                      3,
                      4
                    ]
                  },
                  "strength": {
                    "title": "Strength",
                    "x-inspector": {
                      "label": "Strength",
                      "control": "number",
                      "group": "Block",
                      "help": "The dithered plane’s opacity over the continuous picture, 0 to 1; 1 is the pure two tone."
                    },
                    "description": "The dithered plane’s opacity over the continuous picture, 0 to 1; 1 is the pure two tone.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "black": {
                    "title": "Black point",
                    "x-inspector": {
                      "label": "Black point",
                      "control": "number",
                      "group": "Block",
                      "help": "Values at or below it become ink; 0 unless set, 120 in the Photograph preset."
                    },
                    "description": "Values at or below it become ink; 0 unless set, 120 in the Photograph preset.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 255
                  },
                  "white": {
                    "title": "White point",
                    "x-inspector": {
                      "label": "White point",
                      "control": "number",
                      "group": "Block",
                      "help": "Values at or above it become paper; 255 unless set, 230 in the Photograph preset."
                    },
                    "description": "Values at or above it become paper; 255 unless set, 230 in the Photograph preset.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 255
                  },
                  "gamma": {
                    "title": "Gamma",
                    "x-inspector": {
                      "label": "Gamma",
                      "control": "number",
                      "group": "Block",
                      "help": "The midtones, 0.5 to 2; below 1 lifts them; 1 unless set, 0.9 in the Photograph preset."
                    },
                    "description": "The midtones, 0.5 to 2; below 1 lifts them; 1 unless set, 0.9 in the Photograph preset.",
                    "type": "number",
                    "minimum": 0.5,
                    "maximum": 2
                  },
                  "invert": {
                    "title": "Invert",
                    "x-inspector": {
                      "label": "Invert",
                      "control": "toggle",
                      "group": "Block",
                      "help": "Inverts the source before the tone stages, for a light render."
                    },
                    "description": "Inverts the source before the tone stages, for a light render.",
                    "type": "boolean"
                  },
                  "polarity": {
                    "title": "Polarity",
                    "x-inspector": {
                      "label": "Polarity",
                      "control": "select",
                      "snap": [
                        "auto",
                        "dark-ground",
                        "light-ground",
                        "same"
                      ],
                      "group": "Block",
                      "help": "Which theme the positive image serves; auto picks dark ground when the lit fraction is under 0.5; same writes one neutral variant."
                    },
                    "description": "Which theme the positive image serves; auto picks dark ground when the lit fraction is under 0.5; same writes one neutral variant.",
                    "type": "string",
                    "enum": [
                      "auto",
                      "dark-ground",
                      "light-ground",
                      "same"
                    ]
                  },
                  "blur": {
                    "title": "Blur",
                    "x-inspector": {
                      "label": "Blur",
                      "control": "number",
                      "group": "Advanced",
                      "help": "A blur in source pixels of the 1800 px scaled source, 0 to 8."
                    },
                    "description": "A blur in source pixels of the 1800 px scaled source, 0 to 8.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 8
                  },
                  "minFilter": {
                    "title": "Thicken",
                    "x-inspector": {
                      "label": "Thicken",
                      "control": "number",
                      "group": "Advanced",
                      "help": "A minimum filter radius in source pixels, 0 to 9."
                    },
                    "description": "A minimum filter radius in source pixels, 0 to 9.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 9
                  },
                  "channel": {
                    "title": "Channel",
                    "x-inspector": {
                      "label": "Channel",
                      "control": "select",
                      "snap": [
                        "gray",
                        "r",
                        "g",
                        "b"
                      ],
                      "group": "Advanced",
                      "help": "The channel read as the tone; gray unless set."
                    },
                    "description": "The channel read as the tone; gray unless set.",
                    "type": "string",
                    "enum": [
                      "gray",
                      "r",
                      "g",
                      "b"
                    ]
                  },
                  "seed": {
                    "title": "Seed",
                    "x-inspector": {
                      "label": "Seed",
                      "control": "number",
                      "group": "Advanced",
                      "help": "The hash seed of the random pattern, a 32 bit integer; 0 unless set so two writers agree."
                    },
                    "description": "The hash seed of the random pattern, a 32 bit integer; 0 unless set so two writers agree.",
                    "type": "integer",
                    "minimum": -2147483648,
                    "maximum": 2147483647
                  }
                },
                "required": [
                  "pattern"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideId",
          "blockId",
          "dither",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "PictureDitherOutput": {
        "$id": "#/components/schemas/PictureDitherOutput",
        "type": "object",
        "properties": {
          "slide": {
            "$ref": "#/components/schemas/Slide"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          },
          "key": {
            "description": "The variant digest of the resolved dither",
            "type": "string"
          },
          "metrics": {
            "type": "object",
            "properties": {
              "litFraction": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "plateClear": {
                "type": "object",
                "properties": {
                  "plate": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      }
                    ],
                    "items": false,
                    "minItems": 4,
                    "maxItems": 4
                  },
                  "nearestLitPx": {
                    "type": "number",
                    "minimum": 0
                  },
                  "litUnder": {
                    "type": "number",
                    "minimum": 0
                  },
                  "litInBand": {
                    "type": "number",
                    "minimum": 0
                  }
                },
                "required": [
                  "plate",
                  "nearestLitPx",
                  "litUnder",
                  "litInBand"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "litFraction"
            ],
            "additionalProperties": false
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "slide",
          "revision",
          "findings",
          "warnings"
        ],
        "additionalProperties": false
      },
      "PictureMaterializeInput": {
        "$id": "#/components/schemas/PictureMaterializeInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "description": "A subset; 'all' when absent",
            "anyOf": [
              {
                "type": "string",
                "const": "all"
              },
              {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                }
              }
            ]
          },
          "blockIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "prune": {
            "type": "boolean"
          },
          "scale": {
            "description": "Device pixels per sheet pixel; 2 unless set",
            "type": "number",
            "enum": [
              1,
              2
            ]
          },
          "dryRun": {
            "type": "boolean"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "PictureMaterializeOutput": {
        "$id": "#/components/schemas/PictureMaterializeOutput",
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "written": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "assetId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "key": {
                  "type": "string"
                },
                "files": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "metrics": {
                  "type": "object",
                  "properties": {
                    "litFraction": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    "plateClear": {
                      "type": "object",
                      "properties": {
                        "plate": {
                          "type": "array",
                          "prefixItems": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            }
                          ],
                          "items": false,
                          "minItems": 4,
                          "maxItems": 4
                        },
                        "nearestLitPx": {
                          "type": "number",
                          "minimum": 0
                        },
                        "litUnder": {
                          "type": "number",
                          "minimum": 0
                        },
                        "litInBand": {
                          "type": "number",
                          "minimum": 0
                        }
                      },
                      "required": [
                        "plate",
                        "nearestLitPx",
                        "litUnder",
                        "litInBand"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "litFraction"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "assetId",
                "key",
                "files"
              ],
              "additionalProperties": false
            }
          },
          "pruned": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "assetId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "key": {
                  "type": "string"
                }
              },
              "required": [
                "assetId",
                "key"
              ],
              "additionalProperties": false
            }
          },
          "missing": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slideId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "blockId": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                },
                "assetId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "key": {
                  "type": "string"
                }
              },
              "required": [
                "slideId",
                "blockId",
                "assetId",
                "key"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "revision",
          "written",
          "pruned",
          "missing"
        ],
        "additionalProperties": false
      },
      "SlideSetBackgroundPictureInput": {
        "$id": "#/components/schemas/SlideSetBackgroundPictureInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "One or more slide ids"
          },
          "assetId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "file": {
            "description": "A path on the machine, or a data: URL",
            "type": "string"
          },
          "url": {
            "description": "An http(s) URL fetched through safeFetch",
            "type": "string",
            "format": "uri"
          },
          "upload": {
            "description": "Hosted: the key of a presigned client upload",
            "type": "string"
          },
          "alt": {
            "type": "string"
          },
          "dither": {
            "type": "object",
            "properties": {
              "pattern": {
                "type": "string",
                "enum": [
                  "bayer8",
                  "bayer4",
                  "blue64",
                  "random"
                ],
                "title": "Pattern",
                "x-inspector": {
                  "label": "Pattern",
                  "control": "select",
                  "snap": [
                    "bayer8",
                    "bayer4",
                    "blue64",
                    "random"
                  ],
                  "group": "Block",
                  "help": "The threshold texture; Bayer 8 by 8 is the deck’s two tone screen."
                },
                "description": "The threshold texture; Bayer 8 by 8 is the deck’s two tone screen."
              },
              "tone": {
                "title": "Tone",
                "x-inspector": {
                  "label": "Tone",
                  "control": "select",
                  "snap": [
                    "two",
                    "three",
                    "original"
                  ],
                  "group": "Block",
                  "help": "Ink and paper (two), three tones with titanium in the middle, or the picture’s own colours posterised (original)."
                },
                "description": "Ink and paper (two), three tones with titanium in the middle, or the picture’s own colours posterised (original).",
                "type": "string",
                "enum": [
                  "two",
                  "three",
                  "original"
                ]
              },
              "steps": {
                "title": "Steps",
                "x-inspector": {
                  "label": "Steps",
                  "control": "number",
                  "snap": [
                    2,
                    3,
                    4,
                    5,
                    6,
                    7
                  ],
                  "group": "Block",
                  "help": "The colour steps for the original tone, 2 to 7; 4 unless set."
                },
                "description": "The colour steps for the original tone, 2 to 7; 4 unless set.",
                "type": "integer",
                "minimum": 2,
                "maximum": 7
              },
              "cell": {
                "title": "Cell",
                "x-inspector": {
                  "label": "Cell",
                  "control": "select",
                  "snap": [
                    1,
                    2,
                    3,
                    4
                  ],
                  "group": "Block",
                  "help": "Sheet pixels per cell; 2 is the deck’s cell."
                },
                "description": "Sheet pixels per cell; 2 is the deck’s cell.",
                "type": "number",
                "enum": [
                  1,
                  2,
                  3,
                  4
                ]
              },
              "strength": {
                "title": "Strength",
                "x-inspector": {
                  "label": "Strength",
                  "control": "number",
                  "group": "Block",
                  "help": "The dithered plane’s opacity over the continuous picture, 0 to 1; 1 is the pure two tone."
                },
                "description": "The dithered plane’s opacity over the continuous picture, 0 to 1; 1 is the pure two tone.",
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "black": {
                "title": "Black point",
                "x-inspector": {
                  "label": "Black point",
                  "control": "number",
                  "group": "Block",
                  "help": "Values at or below it become ink; 0 unless set, 120 in the Photograph preset."
                },
                "description": "Values at or below it become ink; 0 unless set, 120 in the Photograph preset.",
                "type": "number",
                "minimum": 0,
                "maximum": 255
              },
              "white": {
                "title": "White point",
                "x-inspector": {
                  "label": "White point",
                  "control": "number",
                  "group": "Block",
                  "help": "Values at or above it become paper; 255 unless set, 230 in the Photograph preset."
                },
                "description": "Values at or above it become paper; 255 unless set, 230 in the Photograph preset.",
                "type": "number",
                "minimum": 0,
                "maximum": 255
              },
              "gamma": {
                "title": "Gamma",
                "x-inspector": {
                  "label": "Gamma",
                  "control": "number",
                  "group": "Block",
                  "help": "The midtones, 0.5 to 2; below 1 lifts them; 1 unless set, 0.9 in the Photograph preset."
                },
                "description": "The midtones, 0.5 to 2; below 1 lifts them; 1 unless set, 0.9 in the Photograph preset.",
                "type": "number",
                "minimum": 0.5,
                "maximum": 2
              },
              "invert": {
                "title": "Invert",
                "x-inspector": {
                  "label": "Invert",
                  "control": "toggle",
                  "group": "Block",
                  "help": "Inverts the source before the tone stages, for a light render."
                },
                "description": "Inverts the source before the tone stages, for a light render.",
                "type": "boolean"
              },
              "polarity": {
                "title": "Polarity",
                "x-inspector": {
                  "label": "Polarity",
                  "control": "select",
                  "snap": [
                    "auto",
                    "dark-ground",
                    "light-ground",
                    "same"
                  ],
                  "group": "Block",
                  "help": "Which theme the positive image serves; auto picks dark ground when the lit fraction is under 0.5; same writes one neutral variant."
                },
                "description": "Which theme the positive image serves; auto picks dark ground when the lit fraction is under 0.5; same writes one neutral variant.",
                "type": "string",
                "enum": [
                  "auto",
                  "dark-ground",
                  "light-ground",
                  "same"
                ]
              },
              "blur": {
                "title": "Blur",
                "x-inspector": {
                  "label": "Blur",
                  "control": "number",
                  "group": "Advanced",
                  "help": "A blur in source pixels of the 1800 px scaled source, 0 to 8."
                },
                "description": "A blur in source pixels of the 1800 px scaled source, 0 to 8.",
                "type": "number",
                "minimum": 0,
                "maximum": 8
              },
              "minFilter": {
                "title": "Thicken",
                "x-inspector": {
                  "label": "Thicken",
                  "control": "number",
                  "group": "Advanced",
                  "help": "A minimum filter radius in source pixels, 0 to 9."
                },
                "description": "A minimum filter radius in source pixels, 0 to 9.",
                "type": "number",
                "minimum": 0,
                "maximum": 9
              },
              "channel": {
                "title": "Channel",
                "x-inspector": {
                  "label": "Channel",
                  "control": "select",
                  "snap": [
                    "gray",
                    "r",
                    "g",
                    "b"
                  ],
                  "group": "Advanced",
                  "help": "The channel read as the tone; gray unless set."
                },
                "description": "The channel read as the tone; gray unless set.",
                "type": "string",
                "enum": [
                  "gray",
                  "r",
                  "g",
                  "b"
                ]
              },
              "seed": {
                "title": "Seed",
                "x-inspector": {
                  "label": "Seed",
                  "control": "number",
                  "group": "Advanced",
                  "help": "The hash seed of the random pattern, a 32 bit integer; 0 unless set so two writers agree."
                },
                "description": "The hash seed of the random pattern, a 32 bit integer; 0 unless set so two writers agree.",
                "type": "integer",
                "minimum": -2147483648,
                "maximum": 2147483647
              }
            },
            "required": [
              "pattern"
            ],
            "additionalProperties": false
          },
          "replace": {
            "description": "Replace the covering picture at the bottom of the stack; on unless set",
            "type": "boolean"
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideIds",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideSetBackgroundPictureOutput": {
        "$id": "#/components/schemas/SlideSetBackgroundPictureOutput",
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "assetId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "slides": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slideId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "blockId": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                }
              },
              "required": [
                "slideId",
                "blockId"
              ],
              "additionalProperties": false
            }
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          }
        },
        "required": [
          "revision",
          "assetId",
          "slides",
          "findings"
        ],
        "additionalProperties": false
      },
      "SlideSetBackgroundMaterialInput": {
        "$id": "#/components/schemas/SlideSetBackgroundMaterialInput",
        "type": "object",
        "properties": {
          "slideIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "description": "One or more slide ids"
          },
          "materialId": {
            "type": "string",
            "minLength": 1
          },
          "preset": {
            "type": "string"
          },
          "uniforms": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "number"
                  }
                },
                {
                  "type": "string"
                }
              ]
            }
          },
          "anchor": {
            "description": "The frame time in ms; the catalog default unless set",
            "type": "number",
            "minimum": 0
          },
          "dither": {
            "type": "object",
            "properties": {
              "pattern": {
                "type": "string",
                "enum": [
                  "bayer8",
                  "bayer4",
                  "blue64",
                  "random"
                ],
                "title": "Pattern",
                "x-inspector": {
                  "label": "Pattern",
                  "control": "select",
                  "snap": [
                    "bayer8",
                    "bayer4",
                    "blue64",
                    "random"
                  ],
                  "group": "Block",
                  "help": "The threshold texture; Bayer 8 by 8 is the deck’s two tone screen."
                },
                "description": "The threshold texture; Bayer 8 by 8 is the deck’s two tone screen."
              },
              "tone": {
                "title": "Tone",
                "x-inspector": {
                  "label": "Tone",
                  "control": "select",
                  "snap": [
                    "two",
                    "three",
                    "original"
                  ],
                  "group": "Block",
                  "help": "Ink and paper (two), three tones with titanium in the middle, or the picture’s own colours posterised (original)."
                },
                "description": "Ink and paper (two), three tones with titanium in the middle, or the picture’s own colours posterised (original).",
                "type": "string",
                "enum": [
                  "two",
                  "three",
                  "original"
                ]
              },
              "steps": {
                "title": "Steps",
                "x-inspector": {
                  "label": "Steps",
                  "control": "number",
                  "snap": [
                    2,
                    3,
                    4,
                    5,
                    6,
                    7
                  ],
                  "group": "Block",
                  "help": "The colour steps for the original tone, 2 to 7; 4 unless set."
                },
                "description": "The colour steps for the original tone, 2 to 7; 4 unless set.",
                "type": "integer",
                "minimum": 2,
                "maximum": 7
              },
              "cell": {
                "title": "Cell",
                "x-inspector": {
                  "label": "Cell",
                  "control": "select",
                  "snap": [
                    1,
                    2,
                    3,
                    4
                  ],
                  "group": "Block",
                  "help": "Sheet pixels per cell; 2 is the deck’s cell."
                },
                "description": "Sheet pixels per cell; 2 is the deck’s cell.",
                "type": "number",
                "enum": [
                  1,
                  2,
                  3,
                  4
                ]
              },
              "strength": {
                "title": "Strength",
                "x-inspector": {
                  "label": "Strength",
                  "control": "number",
                  "group": "Block",
                  "help": "The dithered plane’s opacity over the continuous picture, 0 to 1; 1 is the pure two tone."
                },
                "description": "The dithered plane’s opacity over the continuous picture, 0 to 1; 1 is the pure two tone.",
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "black": {
                "title": "Black point",
                "x-inspector": {
                  "label": "Black point",
                  "control": "number",
                  "group": "Block",
                  "help": "Values at or below it become ink; 0 unless set, 120 in the Photograph preset."
                },
                "description": "Values at or below it become ink; 0 unless set, 120 in the Photograph preset.",
                "type": "number",
                "minimum": 0,
                "maximum": 255
              },
              "white": {
                "title": "White point",
                "x-inspector": {
                  "label": "White point",
                  "control": "number",
                  "group": "Block",
                  "help": "Values at or above it become paper; 255 unless set, 230 in the Photograph preset."
                },
                "description": "Values at or above it become paper; 255 unless set, 230 in the Photograph preset.",
                "type": "number",
                "minimum": 0,
                "maximum": 255
              },
              "gamma": {
                "title": "Gamma",
                "x-inspector": {
                  "label": "Gamma",
                  "control": "number",
                  "group": "Block",
                  "help": "The midtones, 0.5 to 2; below 1 lifts them; 1 unless set, 0.9 in the Photograph preset."
                },
                "description": "The midtones, 0.5 to 2; below 1 lifts them; 1 unless set, 0.9 in the Photograph preset.",
                "type": "number",
                "minimum": 0.5,
                "maximum": 2
              },
              "invert": {
                "title": "Invert",
                "x-inspector": {
                  "label": "Invert",
                  "control": "toggle",
                  "group": "Block",
                  "help": "Inverts the source before the tone stages, for a light render."
                },
                "description": "Inverts the source before the tone stages, for a light render.",
                "type": "boolean"
              },
              "polarity": {
                "title": "Polarity",
                "x-inspector": {
                  "label": "Polarity",
                  "control": "select",
                  "snap": [
                    "auto",
                    "dark-ground",
                    "light-ground",
                    "same"
                  ],
                  "group": "Block",
                  "help": "Which theme the positive image serves; auto picks dark ground when the lit fraction is under 0.5; same writes one neutral variant."
                },
                "description": "Which theme the positive image serves; auto picks dark ground when the lit fraction is under 0.5; same writes one neutral variant.",
                "type": "string",
                "enum": [
                  "auto",
                  "dark-ground",
                  "light-ground",
                  "same"
                ]
              },
              "blur": {
                "title": "Blur",
                "x-inspector": {
                  "label": "Blur",
                  "control": "number",
                  "group": "Advanced",
                  "help": "A blur in source pixels of the 1800 px scaled source, 0 to 8."
                },
                "description": "A blur in source pixels of the 1800 px scaled source, 0 to 8.",
                "type": "number",
                "minimum": 0,
                "maximum": 8
              },
              "minFilter": {
                "title": "Thicken",
                "x-inspector": {
                  "label": "Thicken",
                  "control": "number",
                  "group": "Advanced",
                  "help": "A minimum filter radius in source pixels, 0 to 9."
                },
                "description": "A minimum filter radius in source pixels, 0 to 9.",
                "type": "number",
                "minimum": 0,
                "maximum": 9
              },
              "channel": {
                "title": "Channel",
                "x-inspector": {
                  "label": "Channel",
                  "control": "select",
                  "snap": [
                    "gray",
                    "r",
                    "g",
                    "b"
                  ],
                  "group": "Advanced",
                  "help": "The channel read as the tone; gray unless set."
                },
                "description": "The channel read as the tone; gray unless set.",
                "type": "string",
                "enum": [
                  "gray",
                  "r",
                  "g",
                  "b"
                ]
              },
              "seed": {
                "title": "Seed",
                "x-inspector": {
                  "label": "Seed",
                  "control": "number",
                  "group": "Advanced",
                  "help": "The hash seed of the random pattern, a 32 bit integer; 0 unless set so two writers agree."
                },
                "description": "The hash seed of the random pattern, a 32 bit integer; 0 unless set so two writers agree.",
                "type": "integer",
                "minimum": -2147483648,
                "maximum": 2147483647
              }
            },
            "required": [
              "pattern"
            ],
            "additionalProperties": false
          },
          "frame": {
            "description": "The frame the editor drew in its own WebGL at the sheet’s aspect (3200 by 1800); with it no browser launches in the function and the bytes are stored under the key derived id the block frames use",
            "type": "object",
            "properties": {
              "bytes": {
                "type": "string",
                "description": "The PNG, or the WebP the editor sends for a PNG over the function's cap, as base64"
              },
              "renderer": {
                "description": "The WebGL renderer string of the client",
                "type": "string"
              }
            },
            "required": [
              "bytes"
            ],
            "additionalProperties": false
          },
          "baseRevision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The revision the caller read; a stale value is rejected with 409"
          }
        },
        "required": [
          "slideIds",
          "materialId",
          "baseRevision"
        ],
        "additionalProperties": false
      },
      "SlideSetBackgroundMaterialOutput": {
        "$id": "#/components/schemas/SlideSetBackgroundMaterialOutput",
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "assetId": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "slides": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slideId": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                },
                "blockId": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9-]*$"
                }
              },
              "required": [
                "slideId",
                "blockId"
              ],
              "additionalProperties": false
            }
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Finding"
            }
          }
        },
        "required": [
          "revision",
          "assetId",
          "slides",
          "findings"
        ],
        "additionalProperties": false
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "TypeError",
                  "RangeError",
                  "ConflictError",
                  "NotImplementedError",
                  "Error"
                ]
              },
              "status": {
                "type": "integer"
              },
              "message": {
                "type": "string"
              },
              "code": {
                "type": "string",
                "enum": [
                  "unknown_field",
                  "invalid_input",
                  "unauthorized",
                  "payload_too_large",
                  "not_json",
                  "unknown_action",
                  "not_on_http",
                  "method_not_allowed",
                  "no_session",
                  "unknown_deck"
                ],
                "description": "The machine-readable reason beyond the class name"
              },
              "pointer": {
                "type": "string",
                "description": "A JSON pointer to the field a 400 is about (unknown_field names the extra key)"
              },
              "action": {
                "type": "string"
              },
              "currentRevision": {
                "type": "integer",
                "description": "For ConflictError"
              },
              "current": {
                "description": "The current document for ConflictError, so the re-read is free",
                "type": "object",
                "properties": {
                  "deck": {
                    "$ref": "#/components/schemas/Deck"
                  },
                  "slides": {
                    "type": "object",
                    "additionalProperties": {
                      "$ref": "#/components/schemas/Slide"
                    }
                  }
                }
              },
              "holder": {
                "description": "The lease holder when a write was refused for a held lease",
                "$ref": "#/components/schemas/Author"
              },
              "milestone": {
                "type": "string",
                "description": "For NotImplementedError"
              }
            },
            "required": [
              "name",
              "status",
              "message"
            ]
          }
        },
        "required": [
          "error"
        ]
      }
    },
    "securitySchemes": {
      "bearer": {
        "type": "http",
        "scheme": "bearer",
        "description": "TURBOSLIDE_TOKEN of the deployment (SPEC 11). Required on every host but localhost; an instance without a token serves localhost only."
      }
    }
  }
}
