changedInput schema / properties / block / oneOf
Previous value: -[
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "text": {
- "description": "Plain semantic HTML",
- "type": "string"
- },
- "type": {
- "const": "content",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "text"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "grid": {
- "const": true,
- "description": "Several set in a grid instead of a row, each cropped to 16:9, two across from a tablet up: a gallery",
- "type": "boolean"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "items": {
- "description": "One picture or video, or several in a row the visitor scrolls sideways, each once, in order",
- "items": {
- "properties": {
- "alt": {
- "description": "What it shows",
- "type": "string"
- },
- "caption": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "poster": {
- "description": "A video's picture before it plays",
- "pattern": "^https:\\/\\/\\S+$",
- "type": "string"
- },
- "src": {
- "description": "The picture by https URL, or with \"video\": true an MP4 file",
- "pattern": "^https:\\/\\/\\S+$",
- "type": "string"
- },
- "video": {
- "const": true,
- "description": "src is an MP4 file that plays",
- "type": "boolean"
- }
- },
- "required": [
- "src",
- "alt"
- ],
- "type": "object"
- },
- "maxItems": 100,
- "minItems": 1,
- "type": "array"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "pictures",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "items"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "tabs": {
- "items": {
- "properties": {
- "code": {
- "type": "string"
- },
- "label": {
- "minLength": 1,
- "type": "string"
- },
- "language": {
- "type": "string"
- }
- },
- "required": [
- "label",
- "code"
- ],
- "type": "object"
- },
- "maxItems": 8,
- "minItems": 1,
- "type": "array"
- },
- "type": {
- "const": "codeTabs",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "tabs"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "columns": {
- "anyOf": [
- {
- "const": 2,
- "type": "number"
- },
- {
- "const": 3,
- "type": "number"
- },
- {
- "const": 4,
- "type": "number"
- }
- ],
- "description": "How many to a row; unset, as many as fit"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "items": {
- "items": {
- "properties": {
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "label": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "minLength": 1,
- "type": "string"
- },
- "suffix": {
- "type": "string"
- },
- "value": {
- "description": "As it should read, \"1987\", \"40+\", \"4.9★\": A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "value",
- "label"
- ],
- "type": "object"
- },
- "maxItems": 12,
- "minItems": 1,
- "type": "array"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "stats",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "items"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "groups": {
- "description": "Groups of links under a heading each",
- "items": {
- "properties": {
- "description": {
- "description": "Plain semantic HTML",
- "type": [
- "string",
- "null"
- ]
- },
- "heading": {
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "links": {
- "items": {
- "properties": {
- "href": {
- "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
- "type": "string"
- },
- "label": {
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "label",
- "href"
- ],
- "type": "object"
- },
- "type": "array"
- }
- },
- "required": [
- "heading",
- "links"
- ],
- "type": "object"
- },
- "minItems": 1,
- "type": "array"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "intro": {
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "linkGrid",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "groups"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "items": {
- "items": {
- "properties": {
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "text": {
- "description": "The citation, plain semantic HTML",
- "minLength": 1,
- "type": "string"
- },
- "url": {
- "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
- "type": "string"
- }
- },
- "required": [
- "text"
- ],
- "type": "object"
- },
- "minItems": 1,
- "type": "array"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "title": {
- "description": "Its heading; unset, \"References\"",
- "type": "string"
- },
- "type": {
- "const": "references",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "items"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "text": {
- "description": "Words in place of the notice's standard ones",
- "type": "string"
- },
- "type": {
- "const": "banner",
- "type": "string"
- },
- "variant": {
- "description": "The notice: a stub, unsourced, outdated, promotional, needing cleanup, or written with a conflict of interest",
- "enum": [
- "stub",
- "unsourced",
- "outdated",
- "promotional",
- "cleanup",
- "coi"
- ],
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "variant"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "count": {
- "description": "With \"newest\", how many; unset, 6",
- "maximum": 48,
- "minimum": 1,
- "type": "integer"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "menu": {
- "description": "With \"products\", the shop's lists, linked down the left of the cards with this one marked; the block then heads the page with its title",
- "items": {
- "properties": {
- "href": {
- "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
- "type": "string"
- },
- "label": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size, with no <a>, as it is a link already",
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "label",
- "href"
- ],
- "type": "object"
- },
- "maxItems": 24,
- "type": "array"
- },
- "pages": {
- "description": "With \"chosen\", the pages by path, in the order they are listed",
- "items": {
- "type": "string"
- },
- "maxItems": 48,
- "type": "array"
- },
- "shape": {
- "description": "Each card's picture upright, as a book's cover or a poster, or wide; unset, square for products and wide for pages",
- "enum": [
- "portrait",
- "landscape"
- ],
- "type": "string"
- },
- "show": {
- "default": "cards",
- "description": "Cards of each page's first picture, title and search snippet, or links with how long ago each changed; products are always cards",
- "enum": [
- "cards",
- "links"
- ],
- "type": "string"
- },
- "source": {
- "description": "\"under\" the pages directly under an address (on a wiki, in a category); \"newest\" the most recently changed; \"chosen\" the pages named in \"pages\"; \"products\" the product pages",
- "enum": [
- "under",
- "newest",
- "chosen",
- "products"
- ],
- "type": "string"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "tag": {
- "description": "With \"products\", only those with this tag; omit for all",
- "type": "string"
- },
- "type": {
- "const": "list",
- "type": "string"
- },
- "under": {
- "description": "The address or category listed, or with \"newest\" the one the newest are taken from; omit for the top level, or the whole site",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "source"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "items": {
- "description": "In any order: the page sets those to come soonest first and those that have ended latest first, by the day it is read",
- "items": {
- "properties": {
- "date": {
- "description": "When it starts, as precisely as known: \"2026\", \"2026-11\" or \"2026-11-12\"",
- "pattern": "^\\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\\d|3[01]))?)?$",
- "type": "string"
- },
- "end": {
- "description": "When it ends, written as date is; unset, it ends when it starts",
- "pattern": "^\\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\\d|3[01]))?)?$",
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "text": {
- "description": "What it is and where: A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "date",
- "text"
- ],
- "type": "object"
- },
- "maxItems": 300,
- "minItems": 1,
- "type": "array"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "past": {
- "description": "The heading over those that have ended; unset, \"Past\". A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "events",
- "type": "string"
- },
- "upcoming": {
- "description": "The heading over those to come or on now; unset, \"Upcoming\". A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "items"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "heading": {
- "description": "An h2 over the places, whose names are then h3s; unset, each name is an h2. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "items": {
- "items": {
- "properties": {
- "address": {
- "description": "Plain text, a line to a line: \"27 Monmouth Street\\nLondon WC2H 9EU\"",
- "type": "string"
- },
- "email": {
- "pattern": "^[^\\s@<>]+@[^\\s@<>]+\\.[^\\s@<>]+$",
- "type": "string"
- },
- "hours": {
- "description": "Its regular opening hours, a row for each set of days that keeps the same times and two rows for a day it closes in the middle of; a day in none is closed",
- "items": {
- "properties": {
- "closes": {
- "description": "24-hour: \"18:00\"; at or before opens, the next morning; equal to opens, open all day",
- "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$",
- "type": "string"
- },
- "days": {
- "description": "The days these hours hold: \"mon\" to \"sun\"",
- "items": {
- "enum": [
- "mon",
- "tue",
- "wed",
- "thu",
- "fri",
- "sat",
- "sun"
- ],
- "type": "string"
- },
- "minItems": 1,
- "type": "array"
- },
- "opens": {
- "description": "24-hour: \"08:00\"",
- "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$",
- "type": "string"
- }
- },
- "required": [
- "days",
- "opens",
- "closes"
- ],
- "type": "object"
- },
- "maxItems": 21,
- "type": "array"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "image": {
- "description": "A picture of it, by https URL",
- "pattern": "^https:\\/\\/\\S+$",
- "type": "string"
- },
- "map": {
- "description": "A link to the place on a map, as the business gives it; unset, a search for the address",
- "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
- "type": "string"
- },
- "name": {
- "description": "Which one it is, where a business has several: \"Covent Garden\"; unset where it has one. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "note": {
- "description": "What the hours do not say: \"Closed on bank holidays\", \"Card payments only\"; A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "phone": {
- "description": "As it reads: \"020 7232 3010\"",
- "pattern": "^\\+?[\\d\\s().-]{6,}$",
- "type": "string"
- },
- "timeZone": {
- "description": "Where its clock is, as \"America/Los_Angeles\"; unset, \"Europe/London\"",
- "type": "string"
- }
- },
- "type": "object"
- },
- "maxItems": 100,
- "minItems": 1,
- "type": "array"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "map": {
- "const": true,
- "description": "A map of each address, set under it",
- "type": "boolean"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "locations",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "items"
- ],
- "type": "object"
- },
- {
- "properties": {
- "align": {
- "enum": [
- "start",
- "center",
- "end",
- "stretch"
- ],
- "type": "string"
- },
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "beside": {
- "const": true,
- "description": "Set as one panel beside the text, its columns stacked in it: a facts panel on a page about one thing, placed before its content",
- "type": "boolean"
- },
- "columns": {
- "items": {
- "properties": {
- "align": {
- "description": "Where its words and headings sit: at the start of the line, centred or at the end; unset, as the rest of the page",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "area": {
- "description": "Its place on a twelve-column grid; give every column one, or none",
- "properties": {
- "col": {
- "maximum": 12,
- "minimum": 1,
- "type": "integer"
- },
- "row": {
- "maximum": 99,
- "minimum": 1,
- "type": "integer"
- },
- "rows": {
- "maximum": 99,
- "minimum": 1,
- "type": "integer"
- },
- "span": {
- "maximum": 12,
- "minimum": 1,
- "type": "integer"
- }
- },
- "required": [
- "col",
- "span",
- "row",
- "rows"
- ],
- "type": "object"
- },
- "blocks": {
- "items": {
- "oneOf": [
- {
- "properties": {
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "text": {
- "description": "Plain semantic HTML",
- "type": "string"
- },
- "type": {
- "const": "content",
- "type": "string"
- }
- },
- "required": [
- "type",
- "text"
- ],
- "type": "object"
- },
- {
- "properties": {
- "grid": {
- "const": true,
- "description": "Several set in a grid instead of a row, each cropped to 16:9, two across from a tablet up: a gallery",
- "type": "boolean"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "items": {
- "description": "One picture or video, or several in a row the visitor scrolls sideways, each once, in order",
- "items": {
- "properties": {
- "alt": {
- "description": "What it shows",
- "type": "string"
- },
- "caption": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "poster": {
- "description": "A video's picture before it plays",
- "pattern": "^https:\\/\\/\\S+$",
- "type": "string"
- },
- "src": {
- "description": "The picture by https URL, or with \"video\": true an MP4 file",
- "pattern": "^https:\\/\\/\\S+$",
- "type": "string"
- },
- "video": {
- "const": true,
- "description": "src is an MP4 file that plays",
- "type": "boolean"
- }
- },
- "required": [
- "src",
- "alt"
- ],
- "type": "object"
- },
- "maxItems": 100,
- "minItems": 1,
- "type": "array"
- },
- "type": {
- "const": "pictures",
- "type": "string"
- }
- },
- "required": [
- "type",
- "items"
- ],
- "type": "object"
- },
- {
- "properties": {
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "tabs": {
- "items": {
- "properties": {
- "code": {
- "type": "string"
- },
- "label": {
- "minLength": 1,
- "type": "string"
- },
- "language": {
- "type": "string"
- }
- },
- "required": [
- "label",
- "code"
- ],
- "type": "object"
- },
- "maxItems": 8,
- "minItems": 1,
- "type": "array"
- },
- "type": {
- "const": "codeTabs",
- "type": "string"
- }
- },
- "required": [
- "type",
- "tabs"
- ],
- "type": "object"
- },
- {
- "properties": {
- "columns": {
- "anyOf": [
- {
- "const": 2,
- "type": "number"
- },
- {
- "const": 3,
- "type": "number"
- },
- {
- "const": 4,
- "type": "number"
- }
- ],
- "description": "How many to a row; unset, as many as fit"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "items": {
- "items": {
- "properties": {
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "label": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "minLength": 1,
- "type": "string"
- },
- "suffix": {
- "type": "string"
- },
- "value": {
- "description": "As it should read, \"1987\", \"40+\", \"4.9★\": A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "value",
- "label"
- ],
- "type": "object"
- },
- "maxItems": 12,
- "minItems": 1,
- "type": "array"
- },
- "type": {
- "const": "stats",
- "type": "string"
- }
- },
- "required": [
- "type",
- "items"
- ],
- "type": "object"
- },
- {
- "properties": {
- "groups": {
- "description": "Groups of links under a heading each",
- "items": {
- "properties": {
- "description": {
- "description": "Plain semantic HTML",
- "type": [
- "string",
- "null"
- ]
- },
- "heading": {
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "links": {
- "items": {
- "properties": {
- "href": {
- "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
- "type": "string"
- },
- "label": {
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "label",
- "href"
- ],
- "type": "object"
- },
- "type": "array"
- }
- },
- "required": [
- "heading",
- "links"
- ],
- "type": "object"
- },
- "minItems": 1,
- "type": "array"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "intro": {
- "type": "string"
- },
- "type": {
- "const": "linkGrid",
- "type": "string"
- }
- },
- "required": [
- "type",
- "groups"
- ],
- "type": "object"
- },
- {
- "properties": {
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "items": {
- "items": {
- "properties": {
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "text": {
- "description": "The citation, plain semantic HTML",
- "minLength": 1,
- "type": "string"
- },
- "url": {
- "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
- "type": "string"
- }
- },
- "required": [
- "text"
- ],
- "type": "object"
- },
- "minItems": 1,
- "type": "array"
- },
- "title": {
- "description": "Its heading; unset, \"References\"",
- "type": "string"
- },
- "type": {
- "const": "references",
- "type": "string"
- }
- },
- "required": [
- "type",
- "items"
- ],
- "type": "object"
- },
- {
- "properties": {
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "text": {
- "description": "Words in place of the notice's standard ones",
- "type": "string"
- },
- "type": {
- "const": "banner",
- "type": "string"
- },
- "variant": {
- "description": "The notice: a stub, unsourced, outdated, promotional, needing cleanup, or written with a conflict of interest",
- "enum": [
- "stub",
- "unsourced",
- "outdated",
- "promotional",
- "cleanup",
- "coi"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "variant"
- ],
- "type": "object"
- },
- {
- "properties": {
- "count": {
- "description": "With \"newest\", how many; unset, 6",
- "maximum": 48,
- "minimum": 1,
- "type": "integer"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "menu": {
- "description": "With \"products\", the shop's lists, linked down the left of the cards with this one marked; the block then heads the page with its title",
- "items": {
- "properties": {
- "href": {
- "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
- "type": "string"
- },
- "label": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size, with no <a>, as it is a link already",
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "label",
- "href"
- ],
- "type": "object"
- },
- "maxItems": 24,
- "type": "array"
- },
- "pages": {
- "description": "With \"chosen\", the pages by path, in the order they are listed",
- "items": {
- "type": "string"
- },
- "maxItems": 48,
- "type": "array"
- },
- "shape": {
- "description": "Each card's picture upright, as a book's cover or a poster, or wide; unset, square for products and wide for pages",
- "enum": [
- "portrait",
- "landscape"
- ],
- "type": "string"
- },
- "show": {
- "default": "cards",
- "description": "Cards of each page's first picture, title and search snippet, or links with how long ago each changed; products are always cards",
- "enum": [
- "cards",
- "links"
- ],
- "type": "string"
- },
- "source": {
- "description": "\"under\" the pages directly under an address (on a wiki, in a category); \"newest\" the most recently changed; \"chosen\" the pages named in \"pages\"; \"products\" the product pages",
- "enum": [
- "under",
- "newest",
- "chosen",
- "products"
- ],
- "type": "string"
- },
- "tag": {
- "description": "With \"products\", only those with this tag; omit for all",
- "type": "string"
- },
- "type": {
- "const": "list",
- "type": "string"
- },
- "under": {
- "description": "The address or category listed, or with \"newest\" the one the newest are taken from; omit for the top level, or the whole site",
- "type": "string"
- }
- },
- "required": [
- "type",
- "source"
- ],
- "type": "object"
- },
- {
- "properties": {
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "items": {
- "description": "In any order: the page sets those to come soonest first and those that have ended latest first, by the day it is read",
- "items": {
- "properties": {
- "date": {
- "description": "When it starts, as precisely as known: \"2026\", \"2026-11\" or \"2026-11-12\"",
- "pattern": "^\\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\\d|3[01]))?)?$",
- "type": "string"
- },
- "end": {
- "description": "When it ends, written as date is; unset, it ends when it starts",
- "pattern": "^\\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\\d|3[01]))?)?$",
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "text": {
- "description": "What it is and where: A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "date",
- "text"
- ],
- "type": "object"
- },
- "maxItems": 300,
- "minItems": 1,
- "type": "array"
- },
- "past": {
- "description": "The heading over those that have ended; unset, \"Past\". A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "type": {
- "const": "events",
- "type": "string"
- },
- "upcoming": {
- "description": "The heading over those to come or on now; unset, \"Upcoming\". A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- }
- },
- "required": [
- "type",
- "items"
- ],
- "type": "object"
- },
- {
- "properties": {
- "heading": {
- "description": "An h2 over the places, whose names are then h3s; unset, each name is an h2. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "items": {
- "items": {
- "properties": {
- "address": {
- "description": "Plain text, a line to a line: \"27 Monmouth Street\\nLondon WC2H 9EU\"",
- "type": "string"
- },
- "email": {
- "pattern": "^[^\\s@<>]+@[^\\s@<>]+\\.[^\\s@<>]+$",
- "type": "string"
- },
- "hours": {
- "description": "Its regular opening hours, a row for each set of days that keeps the same times and two rows for a day it closes in the middle of; a day in none is closed",
- "items": {
- "properties": {
- "closes": {
- "description": "24-hour: \"18:00\"; at or before opens, the next morning; equal to opens, open all day",
- "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$",
- "type": "string"
- },
- "days": {
- "description": "The days these hours hold: \"mon\" to \"sun\"",
- "items": {
- "enum": [
- "mon",
- "tue",
- "wed",
- "thu",
- "fri",
- "sat",
- "sun"
- ],
- "type": "string"
- },
- "minItems": 1,
- "type": "array"
- },
- "opens": {
- "description": "24-hour: \"08:00\"",
- "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$",
- "type": "string"
- }
- },
- "required": [
- "days",
- "opens",
- "closes"
- ],
- "type": "object"
- },
- "maxItems": 21,
- "type": "array"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "image": {
- "description": "A picture of it, by https URL",
- "pattern": "^https:\\/\\/\\S+$",
- "type": "string"
- },
- "map": {
- "description": "A link to the place on a map, as the business gives it; unset, a search for the address",
- "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
- "type": "string"
- },
- "name": {
- "description": "Which one it is, where a business has several: \"Covent Garden\"; unset where it has one. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "note": {
- "description": "What the hours do not say: \"Closed on bank holidays\", \"Card payments only\"; A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "phone": {
- "description": "As it reads: \"020 7232 3010\"",
- "pattern": "^\\+?[\\d\\s().-]{6,}$",
- "type": "string"
- },
- "timeZone": {
- "description": "Where its clock is, as \"America/Los_Angeles\"; unset, \"Europe/London\"",
- "type": "string"
- }
- },
- "type": "object"
- },
- "maxItems": 100,
- "minItems": 1,
- "type": "array"
- },
- "map": {
- "const": true,
- "description": "A map of each address, set under it",
- "type": "boolean"
- },
- "type": {
- "const": "locations",
- "type": "string"
- }
- },
- "required": [
- "type",
- "items"
- ],
- "type": "object"
- }
- ]
- },
- "type": "array"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- }
- },
- "type": "object"
- },
- "maxItems": 12,
- "minItems": 1,
- "type": "array"
- },
- "gap": {
- "enum": [
- "sm",
- "md",
- "lg"
- ],
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "columns",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "columns"
- ],
- "type": "object"
- },
- {
- "properties": {
- "action": {
- "properties": {
- "href": {
- "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
- "type": "string"
- },
- "label": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size, with no <a>, as it is a link already",
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "label",
- "href"
- ],
- "type": "object"
- },
- "backdrop": {
- "description": "With no picture, a slowly moving field of the site's own colours behind the heading: \"mesh\" smooth, \"grain\" grainy as print, \"flow\" folding like poured paint, \"marble\" hard-edged as marbled paper",
- "enum": [
- "mesh",
- "grain",
- "flow",
- "marble"
- ],
- "type": "string"
- },
- "backdropIntensity": {
- "description": "How strongly the backdrop swirls and folds: 0 gently, 1 wildly; unset, 0.5",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "backdropSpeed": {
- "description": "How fast the backdrop moves: 0 still, 1 fast; unset, 0.25, slowly",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "box": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent",
- "none"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "Over a picture, a backdrop or as a cover, what the words sit on: unset, boxes of the page's background; \"panel\" or \"accent\" boxes of that colour; any colour as \"#rrggbb\", its words dark or light to read on it; \"none\" no box, light words straight on the picture"
- },
- "call": {
- "const": true,
- "description": "A call to action further down the page rather than its opening: its heading an h2, set smaller",
- "type": "boolean"
- },
- "cover": {
- "const": true,
- "description": "Set as it is over a picture, with nothing behind it: centred, its words on their boxes, on the page's own colour",
- "type": "boolean"
- },
- "heading": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size; words in <strong> are drawn in the accent colour",
- "type": "string"
- },
- "height": {
- "description": "How tall it is: \"fit\" its words, \"half\" the screen, \"wide\" as a 16:9 picture is for its width, or \"full\"; unset, full over a picture or backdrop and fit otherwise",
- "enum": [
- "fit",
- "half",
- "wide",
- "full"
- ],
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "image": {
- "description": "A picture behind the heading, by https URL",
- "pattern": "^https:\\/\\/\\S+$",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "subheading": {
- "description": "Its text is a subheading, set in the headings' font, each line on its own",
- "type": "boolean"
- },
- "text": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "type": {
- "const": "hero",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "heading"
- ],
- "type": "object"
- },
- {
- "properties": {
- "action": {
- "description": "A button of its own, to where it is sold or booked elsewhere: a publisher's or a gallery's page, a booking calendar",
- "properties": {
- "href": {
- "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
- "type": "string"
- },
- "label": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size, with no <a>, as it is a link already",
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "label",
- "href"
- ],
- "type": "object"
- },
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "duration": {
- "description": "With \"service\", how long it takes, as it reads: \"1 hour\", \"Half a day\". A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "maxLength": 40,
- "type": "string"
- },
- "file": {
- "description": "What a buyer downloads once they have paid, which only the site's owner sets, from Products; send it back as read",
- "properties": {
- "key": {
- "maxLength": 400,
- "minLength": 1,
- "type": "string"
- },
- "name": {
- "maxLength": 200,
- "minLength": 1,
- "type": "string"
- },
- "size": {
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "key",
- "name",
- "size"
- ],
- "type": "object"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "images": {
- "description": "Its pictures by https URL, the first on every listing",
- "items": {
- "pattern": "^https:\\/\\/\\S+$",
- "type": "string"
- },
- "type": "array"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "price": {
- "description": "As it should read, currency included, \"£2,500\": A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "service": {
- "const": true,
- "description": "It is a service, booked rather than sold: a lesson, a treatment, a consultation",
- "type": "boolean"
- },
- "sold": {
- "description": "A thing sold, or a service fully booked",
- "type": "boolean"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "tags": {
- "default": [],
- "description": "The listings it appears in, by their \"tag\"",
- "items": {
- "minLength": 1,
- "type": "string"
- },
- "type": "array"
- },
- "text": {
- "description": "Plain semantic HTML: materials, size, year, what it is; for a service, what it involves",
- "type": "string"
- },
- "type": {
- "const": "product",
- "type": "string"
- },
- "unit": {
- "description": "With \"service\", what the price is for, as it reads after it: \"an hour\", \"a session\", \"per person\"; bought online, the buyer says how many. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "maxLength": 40,
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "images",
- "text"
- ],
- "type": "object"
- },
- {
- "properties": {
- "amounts": {
- "default": [],
- "description": "The suggested gifts as they read, in one currency, only as the charity gives them: [\"£10\", \"£20\"]; the donor may always give an amount of their own",
- "items": {
- "type": "string"
- },
- "maxItems": 6,
- "type": "array"
- },
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "currency": {
- "description": "With no amounts, the currency gifts are in; unset, £",
- "enum": [
- "£",
- "$",
- "€"
- ],
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "monthly": {
- "description": "The donor may give it every month as well as once",
- "type": "boolean"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "donate",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type"
- ],
- "type": "object"
- },
- {
- "properties": {
- "author": {
- "description": "Their name: A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "minLength": 1,
- "type": "string"
- },
- "avatarUrl": {
- "description": "Their photo, by https URL",
- "pattern": "^https:\\/\\/\\S+$",
- "type": "string"
- },
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "quote": {
- "description": "Their words, exactly: A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "minLength": 1,
- "type": "string"
- },
- "role": {
- "description": "Who they are, \"Bride, 2024\", \"Head chef, The Ivy\": A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "testimonial",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "quote",
- "author"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "note": {
- "description": "A line under it, where it first appeared, \"From Wringing Blood (Shoestring Press, 2013)\": A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "text": {
- "description": "As set, a line to a line, a blank line between stanzas, the spaces that indent a line kept; each line inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "minLength": 1,
- "type": "string"
- },
- "title": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "type": {
- "const": "poem",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "text"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "heading": {
- "description": "An h2 over it. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "login": {
- "description": "Whose contributions: a GitHub username, as in github.com/<username>",
- "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9]|-(?=[A-Za-z0-9])){0,38}$",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "github",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "login"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "contents",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "items": {
- "description": "In the order the page scrolls",
- "items": {
- "properties": {
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "section": {
- "description": "The id of the section the picture is shown from, as it scrolls into view: an h2 or h3 in the page's text, as its heading reads in lowercase with hyphens for spaces, \"excelsior-studios\"; unset, from where the page opens",
- "pattern": "^[\\w-]+$",
- "type": "string"
- },
- "src": {
- "description": "The picture, by https URL",
- "pattern": "^https:\\/\\/\\S+$",
- "type": "string"
- }
- },
- "required": [
- "src"
- ],
- "type": "object"
- },
- "maxItems": 40,
- "minItems": 1,
- "type": "array"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "scenes",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "items"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "comments",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type"
- ],
- "type": "object"
- },
- {
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "contact",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type"
- ],
- "type": "object"
- },
- {
- "description": "miow.me's own home page editor; never on another site",
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "start",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type"
- ],
- "type": "object"
- },
- {
- "description": "miow.me's own hosting prices; never on another site",
- "properties": {
- "band": {
- "anyOf": [
- {
- "enum": [
- "panel",
- "accent"
- ],
- "type": "string"
- },
- {
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- }
- ],
- "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
- },
- "heading": {
- "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
- "type": "string"
- },
- "id": {
- "description": "Omit on a new block, keep as read on one you send back; assigned on write",
- "type": "string"
- },
- "look": {
- "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
- "properties": {
- "--align": {
- "description": "Where its words sit: at the start of the line, centred or at the end",
- "enum": [
- "start",
- "center",
- "end"
- ],
- "type": "string"
- },
- "--color-accent": {
- "description": "Its links, buttons and accent",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-heading": {
- "description": "Its headings",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-muted": {
- "description": "Its quieter words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "--color-text": {
- "description": "Its words",
- "pattern": "^#[0-9a-f]{6}$",
- "type": "string"
- },
- "depth": {
- "description": "Shadow under buttons and panels: 0 flat, 1 raised",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "roundness": {
- "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "type": "object"
- },
- "space": {
- "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
- "enum": [
- "none",
- "small",
- "large"
- ],
- "type": "string"
- },
- "type": {
- "const": "pricing",
- "type": "string"
- },
- "width": {
- "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
- "enum": [
- "narrow",
- "full"
- ],
- "type": "string"
- }
- },
- "required": [
- "type"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "text": {
+ "description": "Plain semantic HTML",
+ "type": "string"
+ },
+ "type": {
+ "const": "content",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "text"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "grid": {
+ "const": true,
+ "description": "Several set in a grid instead of a row, each cropped to 16:9, two across from a tablet up: a gallery",
+ "type": "boolean"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "items": {
+ "description": "One picture or video, or several in a row the visitor scrolls sideways, each once, in order",
+ "items": {
+ "properties": {
+ "alt": {
+ "description": "What it shows",
+ "type": "string"
+ },
+ "caption": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "poster": {
+ "description": "A video's picture before it plays",
+ "pattern": "^https:\\/\\/\\S+$",
+ "type": "string"
+ },
+ "src": {
+ "description": "The picture by https URL, or with \"video\": true an MP4 file",
+ "pattern": "^https:\\/\\/\\S+$",
+ "type": "string"
+ },
+ "video": {
+ "const": true,
+ "description": "src is an MP4 file that plays",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "src",
+ "alt"
+ ],
+ "type": "object"
+ },
+ "maxItems": 100,
+ "minItems": 1,
+ "type": "array"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "pictures",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "items"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "tabs": {
+ "items": {
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "label": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "language": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "code"
+ ],
+ "type": "object"
+ },
+ "maxItems": 8,
+ "minItems": 1,
+ "type": "array"
+ },
+ "type": {
+ "const": "codeTabs",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "tabs"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "columns": {
+ "anyOf": [
+ {
+ "const": 2,
+ "type": "number"
+ },
+ {
+ "const": 3,
+ "type": "number"
+ },
+ {
+ "const": 4,
+ "type": "number"
+ }
+ ],
+ "description": "How many to a row; unset, as many as fit"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "items": {
+ "items": {
+ "properties": {
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "label": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "minLength": 1,
+ "type": "string"
+ },
+ "suffix": {
+ "type": "string"
+ },
+ "value": {
+ "description": "As it should read, \"1987\", \"40+\", \"4.9★\": A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "value",
+ "label"
+ ],
+ "type": "object"
+ },
+ "maxItems": 12,
+ "minItems": 1,
+ "type": "array"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "stats",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "items"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "groups": {
+ "description": "Groups of links under a heading each",
+ "items": {
+ "properties": {
+ "description": {
+ "description": "Plain semantic HTML",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "heading": {
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "links": {
+ "items": {
+ "properties": {
+ "href": {
+ "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
+ "type": "string"
+ },
+ "label": {
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "href"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "heading",
+ "links"
+ ],
+ "type": "object"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "intro": {
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "linkGrid",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "groups"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "items": {
+ "items": {
+ "properties": {
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "text": {
+ "description": "The citation, plain semantic HTML",
+ "minLength": 1,
+ "type": "string"
+ },
+ "url": {
+ "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "text"
+ ],
+ "type": "object"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "title": {
+ "description": "Its heading; unset, \"References\"",
+ "type": "string"
+ },
+ "type": {
+ "const": "references",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "items"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "text": {
+ "description": "Words in place of the notice's standard ones",
+ "type": "string"
+ },
+ "type": {
+ "const": "banner",
+ "type": "string"
+ },
+ "variant": {
+ "description": "The notice: a stub, unsourced, outdated, promotional, needing cleanup, or written with a conflict of interest",
+ "enum": [
+ "stub",
+ "unsourced",
+ "outdated",
+ "promotional",
+ "cleanup",
+ "coi"
+ ],
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "variant"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "count": {
+ "description": "With \"newest\", how many; unset, 6",
+ "maximum": 48,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "menu": {
+ "description": "With \"products\", the shop's lists, linked down the left of the cards with this one marked; the block then heads the page with its title",
+ "items": {
+ "properties": {
+ "href": {
+ "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
+ "type": "string"
+ },
+ "label": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size, with no <a>, as it is a link already",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "href"
+ ],
+ "type": "object"
+ },
+ "maxItems": 24,
+ "type": "array"
+ },
+ "pages": {
+ "description": "With \"chosen\", the pages by path, in the order they are listed",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 48,
+ "type": "array"
+ },
+ "shape": {
+ "description": "Each card's picture upright, as a book's cover or a poster, or wide; unset, square for products and wide for pages",
+ "enum": [
+ "portrait",
+ "landscape"
+ ],
+ "type": "string"
+ },
+ "show": {
+ "default": "cards",
+ "description": "Cards of each page's first picture, title and search snippet, or links with how long ago each changed; products are always cards",
+ "enum": [
+ "cards",
+ "links"
+ ],
+ "type": "string"
+ },
+ "source": {
+ "description": "\"under\" the pages directly under an address (on a wiki, in a category); \"newest\" the most recently changed; \"chosen\" the pages named in \"pages\"; \"products\" the product pages",
+ "enum": [
+ "under",
+ "newest",
+ "chosen",
+ "products"
+ ],
+ "type": "string"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "tag": {
+ "description": "With \"products\", only those with this tag; omit for all",
+ "type": "string"
+ },
+ "type": {
+ "const": "list",
+ "type": "string"
+ },
+ "under": {
+ "description": "The address or category listed, or with \"newest\" the one the newest are taken from; omit for the top level, or the whole site",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "source"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "items": {
+ "description": "In any order: the page sets those to come soonest first and those that have ended latest first, by the day it is read",
+ "items": {
+ "properties": {
+ "date": {
+ "description": "When it starts, as precisely as known: \"2026\", \"2026-11\" or \"2026-11-12\"",
+ "pattern": "^\\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\\d|3[01]))?)?$",
+ "type": "string"
+ },
+ "end": {
+ "description": "When it ends, written as date is; unset, it ends when it starts",
+ "pattern": "^\\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\\d|3[01]))?)?$",
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "text": {
+ "description": "What it is and where: A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "date",
+ "text"
+ ],
+ "type": "object"
+ },
+ "maxItems": 300,
+ "minItems": 1,
+ "type": "array"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "past": {
+ "description": "The heading over those that have ended; unset, \"Past\". A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "events",
+ "type": "string"
+ },
+ "upcoming": {
+ "description": "The heading over those to come or on now; unset, \"Upcoming\". A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "items"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "heading": {
+ "description": "An h2 over the places, whose names are then h3s; unset, each name is an h2. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "items": {
+ "items": {
+ "properties": {
+ "address": {
+ "description": "Plain text, a line to a line: \"27 Monmouth Street\\nLondon WC2H 9EU\"",
+ "type": "string"
+ },
+ "email": {
+ "pattern": "^[^\\s@<>]+@[^\\s@<>]+\\.[^\\s@<>]+$",
+ "type": "string"
+ },
+ "hours": {
+ "description": "Its regular opening hours, a row for each set of days that keeps the same times and two rows for a day it closes in the middle of; a day in none is closed",
+ "items": {
+ "properties": {
+ "closes": {
+ "description": "24-hour: \"18:00\"; at or before opens, the next morning; equal to opens, open all day",
+ "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$",
+ "type": "string"
+ },
+ "days": {
+ "description": "The days these hours hold: \"mon\" to \"sun\"",
+ "items": {
+ "enum": [
+ "mon",
+ "tue",
+ "wed",
+ "thu",
+ "fri",
+ "sat",
+ "sun"
+ ],
+ "type": "string"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "opens": {
+ "description": "24-hour: \"08:00\"",
+ "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "days",
+ "opens",
+ "closes"
+ ],
+ "type": "object"
+ },
+ "maxItems": 21,
+ "type": "array"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "image": {
+ "description": "A picture of it, by https URL",
+ "pattern": "^https:\\/\\/\\S+$",
+ "type": "string"
+ },
+ "map": {
+ "description": "A link to the place on a map, as the business gives it; unset, a search for the address",
+ "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
+ "type": "string"
+ },
+ "name": {
+ "description": "Which one it is, where a business has several: \"Covent Garden\"; unset where it has one. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "note": {
+ "description": "What the hours do not say: \"Closed on bank holidays\", \"Card payments only\"; A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "phone": {
+ "description": "As it reads: \"020 7232 3010\"",
+ "pattern": "^\\+?[\\d\\s().-]{6,}$",
+ "type": "string"
+ },
+ "timeZone": {
+ "description": "Where its clock is, as \"America/Los_Angeles\"; unset, \"Europe/London\"",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "maxItems": 100,
+ "minItems": 1,
+ "type": "array"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "map": {
+ "const": true,
+ "description": "A map of each address, set under it",
+ "type": "boolean"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "locations",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "items"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "align": {
+ "enum": [
+ "start",
+ "center",
+ "end",
+ "stretch"
+ ],
+ "type": "string"
+ },
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "beside": {
+ "const": true,
+ "description": "Set as one panel beside the text, its columns stacked in it: a facts panel on a page about one thing, placed before its content",
+ "type": "boolean"
+ },
+ "columns": {
+ "items": {
+ "properties": {
+ "align": {
+ "description": "Where its words and headings sit: at the start of the line, centred or at the end; unset, as the rest of the page",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "area": {
+ "description": "Its place on a twelve-column grid; give every column one, or none",
+ "properties": {
+ "col": {
+ "maximum": 12,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "row": {
+ "maximum": 99,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "rows": {
+ "maximum": 99,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "span": {
+ "maximum": 12,
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "col",
+ "span",
+ "row",
+ "rows"
+ ],
+ "type": "object"
+ },
+ "blocks": {
+ "items": {
+ "oneOf": [
+ {
+ "properties": {
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "text": {
+ "description": "Plain semantic HTML",
+ "type": "string"
+ },
+ "type": {
+ "const": "content",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "text"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "grid": {
+ "const": true,
+ "description": "Several set in a grid instead of a row, each cropped to 16:9, two across from a tablet up: a gallery",
+ "type": "boolean"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "items": {
+ "description": "One picture or video, or several in a row the visitor scrolls sideways, each once, in order",
+ "items": {
+ "properties": {
+ "alt": {
+ "description": "What it shows",
+ "type": "string"
+ },
+ "caption": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "poster": {
+ "description": "A video's picture before it plays",
+ "pattern": "^https:\\/\\/\\S+$",
+ "type": "string"
+ },
+ "src": {
+ "description": "The picture by https URL, or with \"video\": true an MP4 file",
+ "pattern": "^https:\\/\\/\\S+$",
+ "type": "string"
+ },
+ "video": {
+ "const": true,
+ "description": "src is an MP4 file that plays",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "src",
+ "alt"
+ ],
+ "type": "object"
+ },
+ "maxItems": 100,
+ "minItems": 1,
+ "type": "array"
+ },
+ "type": {
+ "const": "pictures",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "items"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "tabs": {
+ "items": {
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "label": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "language": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "code"
+ ],
+ "type": "object"
+ },
+ "maxItems": 8,
+ "minItems": 1,
+ "type": "array"
+ },
+ "type": {
+ "const": "codeTabs",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "tabs"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "columns": {
+ "anyOf": [
+ {
+ "const": 2,
+ "type": "number"
+ },
+ {
+ "const": 3,
+ "type": "number"
+ },
+ {
+ "const": 4,
+ "type": "number"
+ }
+ ],
+ "description": "How many to a row; unset, as many as fit"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "items": {
+ "items": {
+ "properties": {
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "label": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "minLength": 1,
+ "type": "string"
+ },
+ "suffix": {
+ "type": "string"
+ },
+ "value": {
+ "description": "As it should read, \"1987\", \"40+\", \"4.9★\": A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "value",
+ "label"
+ ],
+ "type": "object"
+ },
+ "maxItems": 12,
+ "minItems": 1,
+ "type": "array"
+ },
+ "type": {
+ "const": "stats",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "items"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "groups": {
+ "description": "Groups of links under a heading each",
+ "items": {
+ "properties": {
+ "description": {
+ "description": "Plain semantic HTML",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "heading": {
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "links": {
+ "items": {
+ "properties": {
+ "href": {
+ "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
+ "type": "string"
+ },
+ "label": {
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "href"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "heading",
+ "links"
+ ],
+ "type": "object"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "intro": {
+ "type": "string"
+ },
+ "type": {
+ "const": "linkGrid",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "groups"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "items": {
+ "items": {
+ "properties": {
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "text": {
+ "description": "The citation, plain semantic HTML",
+ "minLength": 1,
+ "type": "string"
+ },
+ "url": {
+ "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "text"
+ ],
+ "type": "object"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "title": {
+ "description": "Its heading; unset, \"References\"",
+ "type": "string"
+ },
+ "type": {
+ "const": "references",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "items"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "text": {
+ "description": "Words in place of the notice's standard ones",
+ "type": "string"
+ },
+ "type": {
+ "const": "banner",
+ "type": "string"
+ },
+ "variant": {
+ "description": "The notice: a stub, unsourced, outdated, promotional, needing cleanup, or written with a conflict of interest",
+ "enum": [
+ "stub",
+ "unsourced",
+ "outdated",
+ "promotional",
+ "cleanup",
+ "coi"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "variant"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "count": {
+ "description": "With \"newest\", how many; unset, 6",
+ "maximum": 48,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "menu": {
+ "description": "With \"products\", the shop's lists, linked down the left of the cards with this one marked; the block then heads the page with its title",
+ "items": {
+ "properties": {
+ "href": {
+ "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
+ "type": "string"
+ },
+ "label": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size, with no <a>, as it is a link already",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "href"
+ ],
+ "type": "object"
+ },
+ "maxItems": 24,
+ "type": "array"
+ },
+ "pages": {
+ "description": "With \"chosen\", the pages by path, in the order they are listed",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 48,
+ "type": "array"
+ },
+ "shape": {
+ "description": "Each card's picture upright, as a book's cover or a poster, or wide; unset, square for products and wide for pages",
+ "enum": [
+ "portrait",
+ "landscape"
+ ],
+ "type": "string"
+ },
+ "show": {
+ "default": "cards",
+ "description": "Cards of each page's first picture, title and search snippet, or links with how long ago each changed; products are always cards",
+ "enum": [
+ "cards",
+ "links"
+ ],
+ "type": "string"
+ },
+ "source": {
+ "description": "\"under\" the pages directly under an address (on a wiki, in a category); \"newest\" the most recently changed; \"chosen\" the pages named in \"pages\"; \"products\" the product pages",
+ "enum": [
+ "under",
+ "newest",
+ "chosen",
+ "products"
+ ],
+ "type": "string"
+ },
+ "tag": {
+ "description": "With \"products\", only those with this tag; omit for all",
+ "type": "string"
+ },
+ "type": {
+ "const": "list",
+ "type": "string"
+ },
+ "under": {
+ "description": "The address or category listed, or with \"newest\" the one the newest are taken from; omit for the top level, or the whole site",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "source"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "items": {
+ "description": "In any order: the page sets those to come soonest first and those that have ended latest first, by the day it is read",
+ "items": {
+ "properties": {
+ "date": {
+ "description": "When it starts, as precisely as known: \"2026\", \"2026-11\" or \"2026-11-12\"",
+ "pattern": "^\\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\\d|3[01]))?)?$",
+ "type": "string"
+ },
+ "end": {
+ "description": "When it ends, written as date is; unset, it ends when it starts",
+ "pattern": "^\\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\\d|3[01]))?)?$",
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "text": {
+ "description": "What it is and where: A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "date",
+ "text"
+ ],
+ "type": "object"
+ },
+ "maxItems": 300,
+ "minItems": 1,
+ "type": "array"
+ },
+ "past": {
+ "description": "The heading over those that have ended; unset, \"Past\". A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "type": {
+ "const": "events",
+ "type": "string"
+ },
+ "upcoming": {
+ "description": "The heading over those to come or on now; unset, \"Upcoming\". A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "items"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "heading": {
+ "description": "An h2 over the places, whose names are then h3s; unset, each name is an h2. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "items": {
+ "items": {
+ "properties": {
+ "address": {
+ "description": "Plain text, a line to a line: \"27 Monmouth Street\\nLondon WC2H 9EU\"",
+ "type": "string"
+ },
+ "email": {
+ "pattern": "^[^\\s@<>]+@[^\\s@<>]+\\.[^\\s@<>]+$",
+ "type": "string"
+ },
+ "hours": {
+ "description": "Its regular opening hours, a row for each set of days that keeps the same times and two rows for a day it closes in the middle of; a day in none is closed",
+ "items": {
+ "properties": {
+ "closes": {
+ "description": "24-hour: \"18:00\"; at or before opens, the next morning; equal to opens, open all day",
+ "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$",
+ "type": "string"
+ },
+ "days": {
+ "description": "The days these hours hold: \"mon\" to \"sun\"",
+ "items": {
+ "enum": [
+ "mon",
+ "tue",
+ "wed",
+ "thu",
+ "fri",
+ "sat",
+ "sun"
+ ],
+ "type": "string"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "opens": {
+ "description": "24-hour: \"08:00\"",
+ "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "days",
+ "opens",
+ "closes"
+ ],
+ "type": "object"
+ },
+ "maxItems": 21,
+ "type": "array"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "image": {
+ "description": "A picture of it, by https URL",
+ "pattern": "^https:\\/\\/\\S+$",
+ "type": "string"
+ },
+ "map": {
+ "description": "A link to the place on a map, as the business gives it; unset, a search for the address",
+ "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
+ "type": "string"
+ },
+ "name": {
+ "description": "Which one it is, where a business has several: \"Covent Garden\"; unset where it has one. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "note": {
+ "description": "What the hours do not say: \"Closed on bank holidays\", \"Card payments only\"; A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "phone": {
+ "description": "As it reads: \"020 7232 3010\"",
+ "pattern": "^\\+?[\\d\\s().-]{6,}$",
+ "type": "string"
+ },
+ "timeZone": {
+ "description": "Where its clock is, as \"America/Los_Angeles\"; unset, \"Europe/London\"",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "maxItems": 100,
+ "minItems": 1,
+ "type": "array"
+ },
+ "map": {
+ "const": true,
+ "description": "A map of each address, set under it",
+ "type": "boolean"
+ },
+ "type": {
+ "const": "locations",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "items"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "type": "array"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "maxItems": 12,
+ "minItems": 1,
+ "type": "array"
+ },
+ "gap": {
+ "enum": [
+ "sm",
+ "md",
+ "lg"
+ ],
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "columns",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "columns"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "action": {
+ "properties": {
+ "href": {
+ "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
+ "type": "string"
+ },
+ "label": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size, with no <a>, as it is a link already",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "href"
+ ],
+ "type": "object"
+ },
+ "backdrop": {
+ "description": "With no picture, a slowly moving field of the site's own colours behind the heading: \"mesh\" smooth, \"grain\" grainy as print, \"flow\" folding like poured paint, \"marble\" hard-edged as marbled paper",
+ "enum": [
+ "mesh",
+ "grain",
+ "flow",
+ "marble"
+ ],
+ "type": "string"
+ },
+ "backdropIntensity": {
+ "description": "How strongly the backdrop swirls and folds: 0 gently, 1 wildly; unset, 0.5",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "backdropSpeed": {
+ "description": "How fast the backdrop moves: 0 still, 1 fast; unset, 0.25, slowly",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "box": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent",
+ "none"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "Over a picture, a backdrop or as a cover, what the words sit on: unset, boxes of the page's background; \"panel\" or \"accent\" boxes of that colour; any colour as \"#rrggbb\", its words dark or light to read on it; \"none\" no box, light words straight on the picture"
+ },
+ "call": {
+ "const": true,
+ "description": "A call to action further down the page rather than its opening: its heading an h2, set smaller",
+ "type": "boolean"
+ },
+ "cover": {
+ "const": true,
+ "description": "Set as it is over a picture, with nothing behind it: centred, its words on their boxes, on the page's own colour",
+ "type": "boolean"
+ },
+ "heading": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size; words in <strong> are drawn in the accent colour",
+ "type": "string"
+ },
+ "height": {
+ "description": "Over a picture, a backdrop, as a cover or on a site with a background picture, how tall it is: \"fit\" its words, \"half\" the screen, \"wide\" as a 16:9 picture is for its width, or \"full\"; unset, full. With nothing behind it, an opening fits its words whatever this says",
+ "enum": [
+ "fit",
+ "half",
+ "wide",
+ "full"
+ ],
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "image": {
+ "description": "A picture behind the heading, by https URL",
+ "pattern": "^https:\\/\\/\\S+$",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "subheading": {
+ "description": "Its text is a subheading, set in the headings' font, each line on its own",
+ "type": "boolean"
+ },
+ "text": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "type": {
+ "const": "hero",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "heading"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "action": {
+ "description": "A button of its own, to where it is sold or booked elsewhere: a publisher's or a gallery's page, a booking calendar",
+ "properties": {
+ "href": {
+ "pattern": "^(?:\\/(?!\\/)\\S*|#[\\w-]+|https?:\\/\\/\\S+|mailto:\\S+|tel:\\S+)$",
+ "type": "string"
+ },
+ "label": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size, with no <a>, as it is a link already",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "href"
+ ],
+ "type": "object"
+ },
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "duration": {
+ "description": "With \"service\", how long it takes, as it reads: \"1 hour\", \"Half a day\". A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "maxLength": 40,
+ "type": "string"
+ },
+ "file": {
+ "description": "What a buyer downloads once they have paid, which only the site's owner sets, from Products; send it back as read",
+ "properties": {
+ "key": {
+ "maxLength": 400,
+ "minLength": 1,
+ "type": "string"
+ },
+ "name": {
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ },
+ "size": {
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "key",
+ "name",
+ "size"
+ ],
+ "type": "object"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "images": {
+ "description": "Its pictures by https URL, the first on every listing",
+ "items": {
+ "pattern": "^https:\\/\\/\\S+$",
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "price": {
+ "description": "As it should read, currency included, \"£2,500\": A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "service": {
+ "const": true,
+ "description": "It is a service, booked rather than sold: a lesson, a treatment, a consultation",
+ "type": "boolean"
+ },
+ "sold": {
+ "description": "A thing sold, or a service fully booked",
+ "type": "boolean"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "tags": {
+ "default": [],
+ "description": "The listings it appears in, by their \"tag\"",
+ "items": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "text": {
+ "description": "Plain semantic HTML: materials, size, year, what it is; for a service, what it involves",
+ "type": "string"
+ },
+ "type": {
+ "const": "product",
+ "type": "string"
+ },
+ "unit": {
+ "description": "With \"service\", what the price is for, as it reads after it: \"an hour\", \"a session\", \"per person\"; bought online, the buyer says how many. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "maxLength": 40,
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "images",
+ "text"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "amounts": {
+ "default": [],
+ "description": "The suggested gifts as they read, in one currency, only as the charity gives them: [\"£10\", \"£20\"]; the donor may always give an amount of their own",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 6,
+ "type": "array"
+ },
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "currency": {
+ "description": "With no amounts, the currency gifts are in; unset, £",
+ "enum": [
+ "£",
+ "$",
+ "€"
+ ],
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "monthly": {
+ "description": "The donor may give it every month as well as once",
+ "type": "boolean"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "donate",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "author": {
+ "description": "Their name: A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "minLength": 1,
+ "type": "string"
+ },
+ "avatarUrl": {
+ "description": "Their photo, by https URL",
+ "pattern": "^https:\\/\\/\\S+$",
+ "type": "string"
+ },
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "quote": {
+ "description": "Their words, exactly: A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "minLength": 1,
+ "type": "string"
+ },
+ "role": {
+ "description": "Who they are, \"Bride, 2024\", \"Head chef, The Ivy\": A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "testimonial",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "quote",
+ "author"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "note": {
+ "description": "A line under it, where it first appeared, \"From Wringing Blood (Shoestring Press, 2013)\": A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "text": {
+ "description": "As set, a line to a line, a blank line between stanzas, the spaces that indent a line kept; each line inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "minLength": 1,
+ "type": "string"
+ },
+ "title": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "type": {
+ "const": "poem",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "text"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "heading": {
+ "description": "An h2 over it. A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "login": {
+ "description": "Whose contributions: a GitHub username, as in github.com/<username>",
+ "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9]|-(?=[A-Za-z0-9])){0,38}$",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "github",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "login"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "contents",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "items": {
+ "description": "In the order the page scrolls",
+ "items": {
+ "properties": {
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "section": {
+ "description": "The id of the section the picture is shown from, as it scrolls into view: an h2 or h3 in the page's text, as its heading reads in lowercase with hyphens for spaces, \"excelsior-studios\"; unset, from where the page opens",
+ "pattern": "^[\\w-]+$",
+ "type": "string"
+ },
+ "src": {
+ "description": "The picture, by https URL",
+ "pattern": "^https:\\/\\/\\S+$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "src"
+ ],
+ "type": "object"
+ },
+ "maxItems": 40,
+ "minItems": 1,
+ "type": "array"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "scenes",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "items"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "comments",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "contact",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "miow.me's own home page editor; never on another site",
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "start",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "miow.me's own hosting prices; never on another site",
+ "properties": {
+ "band": {
+ "anyOf": [
+ {
+ "enum": [
+ "panel",
+ "accent"
+ ],
+ "type": "string"
+ },
+ {
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ }
+ ],
+ "description": "A full-width strip of colour behind the block: \"panel\" or \"accent\" for the site's own, which follow its palette, or any colour as \"#rrggbb\""
+ },
+ "heading": {
+ "description": "A line of words, inline HTML: <strong>, <em>, <code>, <a href> and <span style> with font-family, color or font-size",
+ "type": "string"
+ },
+ "id": {
+ "description": "Omit on a new block, keep as read on one you send back; assigned on write",
+ "type": "string"
+ },
+ "look": {
+ "description": "A look of its own, apart from the site's: each key set wins over the site's for this block alone, and an empty one wears the site's",
+ "properties": {
+ "--align": {
+ "description": "Where its words sit: at the start of the line, centred or at the end",
+ "enum": [
+ "start",
+ "center",
+ "end"
+ ],
+ "type": "string"
+ },
+ "--color-accent": {
+ "description": "Its links, buttons and accent",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-heading": {
+ "description": "Its headings",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-muted": {
+ "description": "Its quieter words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "--color-text": {
+ "description": "Its words",
+ "pattern": "^#[0-9a-f]{6}$",
+ "type": "string"
+ },
+ "depth": {
+ "description": "Shadow under buttons and panels: 0 flat, 1 raised",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "roundness": {
+ "description": "Corners of buttons, pictures and panels: 0 square, 1 round",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "space": {
+ "description": "Space above and below the block, and inside its band: \"none\", \"small\" or \"large\"; unset, the site's spacing",
+ "enum": [
+ "none",
+ "small",
+ "large"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "pricing",
+ "type": "string"
+ },
+ "width": {
+ "description": "\"narrow\" a line of text wide, centred; \"full\" from edge to edge; unset, the page's column",
+ "enum": [
+ "narrow",
+ "full"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "type": "object"
+ }
+]