{
  "$defs": {},
  "$id": "https://stillwarddisplay.com/schema/activity.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "description": "How the island shows one thing going on: a widget's items on the two sides of its compact form and in its open panel, and when it shows. Data only: words name what the program knows, buttons one of a closed list of actions, pictures come from the activity's own folder.",
  "properties": {
    "$schema": {
      "type": "string"
    },
    "aura": {
      "additionalProperties": false,
      "description": "A glow round the island. An activity may carry this alone. Version 2.",
      "properties": {
        "colour": {
          "description": "The glow's colour: the island's own, the accent, the cover of what plays, or light.",
          "enum": [
            "ink",
            "accent",
            "cover",
            "light"
          ],
          "type": "string"
        },
        "events": {
          "description": "Lighting up when something happens: a picture saved, a download done, a device come, the next piece.",
          "type": "boolean"
        },
        "music": {
          "description": "Breathing with how loud what plays is.",
          "type": "boolean"
        },
        "strength": {
          "description": "How strong at its most.",
          "maximum": 1,
          "minimum": 0,
          "type": "number"
        }
      },
      "type": "object"
    },
    "compact": {
      "additionalProperties": false,
      "properties": {
        "height": {
          "description": "How tall the compact form stands while this look shows, in points. Version 2.",
          "maximum": 44.0,
          "minimum": 30.0,
          "type": "number"
        },
        "leading": {
          "additionalProperties": false,
          "properties": {
            "items": {
              "items": {
                "oneOf": [
                  {
                    "additionalProperties": false,
                    "properties": {
                      "align": {
                        "enum": [
                          "start",
                          "middle",
                          "end"
                        ]
                      },
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "colour2": {
                        "description": "A colour the words fade to from left to right.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "family": {
                        "description": "This line's own family, over the widget's. One of: segoe (Segoe UI Variable), bahnschrift (Bahnschrift), bahnschrift-narrow (Bahnschrift), montserrat (Montserrat), raleway (Raleway), unbounded (Unbounded), oswald (Oswald), exo (Exo 2), mono (JetBrains Mono), cormorant (Cormorant), comfortaa (Comfortaa), russo (Russo One), wet-paint (Rubik Wet Paint), spray-paint (Rubik Spray Paint), glitch (Rubik Glitch), stalinist (Stalinist One), tektur (Tektur), jura (Jura), rubik-mono (Rubik Mono One).",
                        "enum": [
                          "segoe",
                          "bahnschrift",
                          "bahnschrift-narrow",
                          "montserrat",
                          "raleway",
                          "unbounded",
                          "oswald",
                          "exo",
                          "mono",
                          "cormorant",
                          "comfortaa",
                          "russo",
                          "wet-paint",
                          "spray-paint",
                          "glitch",
                          "stalinist",
                          "tektur",
                          "jura",
                          "rubik-mono"
                        ],
                        "type": "string"
                      },
                      "fit": {
                        "description": "Made smaller to fit the box rather than cut short.",
                        "type": "boolean"
                      },
                      "font": {
                        "maximum": 160.0,
                        "minimum": 6.0,
                        "type": "number"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "text": {
                        "description": "Words, with any of these in braces for what the program knows: {time}, {time.seconds}, {time.h}, {time.m}, {ampm}, {date}, {date.long}, {date.monthday}, {weekday}, {weekday.short}, {day}, {month}, {month.short}, {year}, {cpu}, {ram}, {ram.used}, {ram.total}, {gpu}, {net.down}, {net.up}, {battery}, {battery.state}, {uptime}, {media.title}, {media.artist}, {media.position}, {media.length}, {media.progress}, {volume}, {desk}, {desk.number}, {desk.count}, {preset}, {timer}, {rec.time}, {game.time}, {download}, {download.percent}, {download.progress}, {call.app}, {output}, {headset.battery}, {shelf}, {agent.state}, {agent.project}, {agent.say}, {agent.allow}, {agent.deny}; {disk.c}, {disk.c.free} for any drive letter; and {time@Tokyo Standard Time}, {offset@Tokyo Standard Time} for the time in a zone, by Windows' own id, and how far it is from yours.",
                        "maxLength": 200,
                        "type": "string"
                      },
                      "touch": {
                        "description": "What the words do as the pointer passes over them: smear as wet paint does and run back, or tear and split as a broken signal.",
                        "enum": [
                          "still",
                          "smear",
                          "glitch"
                        ]
                      },
                      "tracking": {
                        "description": "Room between the letters beyond the face's own, in ems.",
                        "maximum": 0.6000000238418579,
                        "minimum": -0.10000000149011612,
                        "type": "number"
                      },
                      "type": {
                        "const": "text"
                      },
                      "upper": {
                        "description": "In capitals, whatever the words are.",
                        "type": "boolean"
                      },
                      "weight": {
                        "maximum": 900,
                        "minimum": 100,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "text"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "track": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "type": {
                        "const": "bar"
                      },
                      "value": {
                        "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                        "enum": [
                          "cpu",
                          "ram",
                          "gpu",
                          "battery",
                          "volume",
                          "net.down",
                          "net.up",
                          "media.progress",
                          "download.progress"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "value"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "track": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "type": {
                        "const": "ring"
                      },
                      "value": {
                        "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                        "enum": [
                          "cpu",
                          "ram",
                          "gpu",
                          "battery",
                          "volume",
                          "net.down",
                          "net.up",
                          "media.progress",
                          "download.progress"
                        ],
                        "type": "string"
                      },
                      "width": {
                        "minimum": 1,
                        "type": "number"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "value"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "fill": {
                        "type": "boolean"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "seconds": {
                        "maximum": 600,
                        "minimum": 10,
                        "type": "integer"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "graph"
                      },
                      "value": {
                        "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                        "enum": [
                          "cpu",
                          "ram",
                          "gpu",
                          "battery",
                          "volume",
                          "net.down",
                          "net.up",
                          "media.progress",
                          "download.progress"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "value"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "glyph": {
                        "enum": [
                          "play",
                          "pause",
                          "stop",
                          "previous",
                          "next",
                          "volume",
                          "mute",
                          "clock",
                          "calendar",
                          "wifi",
                          "download",
                          "upload",
                          "battery",
                          "monitor",
                          "settings",
                          "home",
                          "star",
                          "music",
                          "video",
                          "game",
                          "sun",
                          "cloud",
                          "search",
                          "folder",
                          "mail",
                          "person",
                          "pin",
                          "stopwatch",
                          "chart",
                          "desks",
                          "power",
                          "heart",
                          "switch",
                          "terminal",
                          "back",
                          "forward"
                        ],
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "glyph"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "glyph"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "file": {
                        "pattern": "^[^\\\\/:.][^\\\\/:]*\\.([pP][nN][gG]|[sS][vV][gG])$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "image"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "file"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "action": {
                        "pattern": "^(media\\.toggle|media\\.next|media\\.previous|volume\\.mute|volume\\.up|volume\\.down|find-pointer|open|rec\\.pause|rec\\.stop|timer\\.pause|timer\\.stop|calendar\\.previous|calendar\\.next|calendar\\.today|media\\.player|agent\\.allow|agent\\.deny|desk:([1-9]|1[0-9]|20)|preset:([1-9]|1[0-9]|20)|timer\\.start:([1-9]|[1-9][0-9]|1[01][0-9]|120))$",
                        "type": "string"
                      },
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "bare": {
                        "description": "Its glyph or words alone, without the pad under them.",
                        "type": "boolean"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "glyph": {
                        "enum": [
                          "play",
                          "pause",
                          "stop",
                          "previous",
                          "next",
                          "volume",
                          "mute",
                          "clock",
                          "calendar",
                          "wifi",
                          "download",
                          "upload",
                          "battery",
                          "monitor",
                          "settings",
                          "home",
                          "star",
                          "music",
                          "video",
                          "game",
                          "sun",
                          "cloud",
                          "search",
                          "folder",
                          "mail",
                          "person",
                          "pin",
                          "stopwatch",
                          "chart",
                          "desks",
                          "power",
                          "heart",
                          "switch",
                          "terminal",
                          "back",
                          "forward"
                        ],
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "text": {
                        "maxLength": 60,
                        "type": "string"
                      },
                      "type": {
                        "const": "button"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "action"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "desks"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "rect"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "dial": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(none|ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "face": {
                        "enum": [
                          "ticks",
                          "numbers",
                          "dots",
                          "bare"
                        ]
                      },
                      "hand": {
                        "description": "The second hand's colour.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "seconds": {
                        "type": "boolean"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "clock"
                      },
                      "zone": {
                        "description": "Windows' own id of a time zone, such as \"Tokyo Standard Time\" (tzutil /l lists them); none, the computer's own.",
                        "pattern": "^[A-Za-z0-9 .+()-]{1,64}$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "today": {
                        "description": "The ring round today.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "type": {
                        "const": "calendar"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "cover"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "bars": {
                        "description": "How many bars, from the bass up.",
                        "maximum": 48,
                        "minimum": 4,
                        "type": "integer"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "form": {
                        "description": "Bars standing on the foot, mirrored about the middle, a filled line over the tops, or columns of dots.",
                        "enum": [
                          "bars",
                          "mirror",
                          "line",
                          "dots"
                        ]
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "spectrum"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  }
                ]
              },
              "maxItems": 48,
              "type": "array"
            },
            "width": {
              "description": "How wide the side is, in points; it is as tall as the compact form (30 unless the look says).",
              "maximum": 64.0,
              "minimum": 12.0,
              "type": "number"
            }
          },
          "type": "object"
        },
        "middle": {
          "additionalProperties": false,
          "description": "The middle of the compact form, in place of the island's own words (the time). Version 2.",
          "properties": {
            "items": {
              "items": {
                "oneOf": [
                  {
                    "additionalProperties": false,
                    "properties": {
                      "align": {
                        "enum": [
                          "start",
                          "middle",
                          "end"
                        ]
                      },
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "colour2": {
                        "description": "A colour the words fade to from left to right.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "family": {
                        "description": "This line's own family, over the widget's. One of: segoe (Segoe UI Variable), bahnschrift (Bahnschrift), bahnschrift-narrow (Bahnschrift), montserrat (Montserrat), raleway (Raleway), unbounded (Unbounded), oswald (Oswald), exo (Exo 2), mono (JetBrains Mono), cormorant (Cormorant), comfortaa (Comfortaa), russo (Russo One), wet-paint (Rubik Wet Paint), spray-paint (Rubik Spray Paint), glitch (Rubik Glitch), stalinist (Stalinist One), tektur (Tektur), jura (Jura), rubik-mono (Rubik Mono One).",
                        "enum": [
                          "segoe",
                          "bahnschrift",
                          "bahnschrift-narrow",
                          "montserrat",
                          "raleway",
                          "unbounded",
                          "oswald",
                          "exo",
                          "mono",
                          "cormorant",
                          "comfortaa",
                          "russo",
                          "wet-paint",
                          "spray-paint",
                          "glitch",
                          "stalinist",
                          "tektur",
                          "jura",
                          "rubik-mono"
                        ],
                        "type": "string"
                      },
                      "fit": {
                        "description": "Made smaller to fit the box rather than cut short.",
                        "type": "boolean"
                      },
                      "font": {
                        "maximum": 160.0,
                        "minimum": 6.0,
                        "type": "number"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "text": {
                        "description": "Words, with any of these in braces for what the program knows: {time}, {time.seconds}, {time.h}, {time.m}, {ampm}, {date}, {date.long}, {date.monthday}, {weekday}, {weekday.short}, {day}, {month}, {month.short}, {year}, {cpu}, {ram}, {ram.used}, {ram.total}, {gpu}, {net.down}, {net.up}, {battery}, {battery.state}, {uptime}, {media.title}, {media.artist}, {media.position}, {media.length}, {media.progress}, {volume}, {desk}, {desk.number}, {desk.count}, {preset}, {timer}, {rec.time}, {game.time}, {download}, {download.percent}, {download.progress}, {call.app}, {output}, {headset.battery}, {shelf}, {agent.state}, {agent.project}, {agent.say}, {agent.allow}, {agent.deny}; {disk.c}, {disk.c.free} for any drive letter; and {time@Tokyo Standard Time}, {offset@Tokyo Standard Time} for the time in a zone, by Windows' own id, and how far it is from yours.",
                        "maxLength": 200,
                        "type": "string"
                      },
                      "touch": {
                        "description": "What the words do as the pointer passes over them: smear as wet paint does and run back, or tear and split as a broken signal.",
                        "enum": [
                          "still",
                          "smear",
                          "glitch"
                        ]
                      },
                      "tracking": {
                        "description": "Room between the letters beyond the face's own, in ems.",
                        "maximum": 0.6000000238418579,
                        "minimum": -0.10000000149011612,
                        "type": "number"
                      },
                      "type": {
                        "const": "text"
                      },
                      "upper": {
                        "description": "In capitals, whatever the words are.",
                        "type": "boolean"
                      },
                      "weight": {
                        "maximum": 900,
                        "minimum": 100,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "text"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "track": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "type": {
                        "const": "bar"
                      },
                      "value": {
                        "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                        "enum": [
                          "cpu",
                          "ram",
                          "gpu",
                          "battery",
                          "volume",
                          "net.down",
                          "net.up",
                          "media.progress",
                          "download.progress"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "value"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "track": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "type": {
                        "const": "ring"
                      },
                      "value": {
                        "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                        "enum": [
                          "cpu",
                          "ram",
                          "gpu",
                          "battery",
                          "volume",
                          "net.down",
                          "net.up",
                          "media.progress",
                          "download.progress"
                        ],
                        "type": "string"
                      },
                      "width": {
                        "minimum": 1,
                        "type": "number"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "value"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "fill": {
                        "type": "boolean"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "seconds": {
                        "maximum": 600,
                        "minimum": 10,
                        "type": "integer"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "graph"
                      },
                      "value": {
                        "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                        "enum": [
                          "cpu",
                          "ram",
                          "gpu",
                          "battery",
                          "volume",
                          "net.down",
                          "net.up",
                          "media.progress",
                          "download.progress"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "value"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "glyph": {
                        "enum": [
                          "play",
                          "pause",
                          "stop",
                          "previous",
                          "next",
                          "volume",
                          "mute",
                          "clock",
                          "calendar",
                          "wifi",
                          "download",
                          "upload",
                          "battery",
                          "monitor",
                          "settings",
                          "home",
                          "star",
                          "music",
                          "video",
                          "game",
                          "sun",
                          "cloud",
                          "search",
                          "folder",
                          "mail",
                          "person",
                          "pin",
                          "stopwatch",
                          "chart",
                          "desks",
                          "power",
                          "heart",
                          "switch",
                          "terminal",
                          "back",
                          "forward"
                        ],
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "glyph"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "glyph"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "file": {
                        "pattern": "^[^\\\\/:.][^\\\\/:]*\\.([pP][nN][gG]|[sS][vV][gG])$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "image"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "file"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "action": {
                        "pattern": "^(media\\.toggle|media\\.next|media\\.previous|volume\\.mute|volume\\.up|volume\\.down|find-pointer|open|rec\\.pause|rec\\.stop|timer\\.pause|timer\\.stop|calendar\\.previous|calendar\\.next|calendar\\.today|media\\.player|agent\\.allow|agent\\.deny|desk:([1-9]|1[0-9]|20)|preset:([1-9]|1[0-9]|20)|timer\\.start:([1-9]|[1-9][0-9]|1[01][0-9]|120))$",
                        "type": "string"
                      },
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "bare": {
                        "description": "Its glyph or words alone, without the pad under them.",
                        "type": "boolean"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "glyph": {
                        "enum": [
                          "play",
                          "pause",
                          "stop",
                          "previous",
                          "next",
                          "volume",
                          "mute",
                          "clock",
                          "calendar",
                          "wifi",
                          "download",
                          "upload",
                          "battery",
                          "monitor",
                          "settings",
                          "home",
                          "star",
                          "music",
                          "video",
                          "game",
                          "sun",
                          "cloud",
                          "search",
                          "folder",
                          "mail",
                          "person",
                          "pin",
                          "stopwatch",
                          "chart",
                          "desks",
                          "power",
                          "heart",
                          "switch",
                          "terminal",
                          "back",
                          "forward"
                        ],
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "text": {
                        "maxLength": 60,
                        "type": "string"
                      },
                      "type": {
                        "const": "button"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "action"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "desks"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "rect"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "dial": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(none|ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "face": {
                        "enum": [
                          "ticks",
                          "numbers",
                          "dots",
                          "bare"
                        ]
                      },
                      "hand": {
                        "description": "The second hand's colour.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "seconds": {
                        "type": "boolean"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "clock"
                      },
                      "zone": {
                        "description": "Windows' own id of a time zone, such as \"Tokyo Standard Time\" (tzutil /l lists them); none, the computer's own.",
                        "pattern": "^[A-Za-z0-9 .+()-]{1,64}$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "today": {
                        "description": "The ring round today.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "type": {
                        "const": "calendar"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "cover"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "bars": {
                        "description": "How many bars, from the bass up.",
                        "maximum": 48,
                        "minimum": 4,
                        "type": "integer"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "form": {
                        "description": "Bars standing on the foot, mirrored about the middle, a filled line over the tops, or columns of dots.",
                        "enum": [
                          "bars",
                          "mirror",
                          "line",
                          "dots"
                        ]
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "spectrum"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  }
                ]
              },
              "maxItems": 48,
              "type": "array"
            },
            "width": {
              "description": "How wide the middle is, in points.",
              "maximum": 220.0,
              "minimum": 40.0,
              "type": "number"
            }
          },
          "type": "object"
        },
        "trailing": {
          "additionalProperties": false,
          "properties": {
            "items": {
              "items": {
                "oneOf": [
                  {
                    "additionalProperties": false,
                    "properties": {
                      "align": {
                        "enum": [
                          "start",
                          "middle",
                          "end"
                        ]
                      },
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "colour2": {
                        "description": "A colour the words fade to from left to right.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "family": {
                        "description": "This line's own family, over the widget's. One of: segoe (Segoe UI Variable), bahnschrift (Bahnschrift), bahnschrift-narrow (Bahnschrift), montserrat (Montserrat), raleway (Raleway), unbounded (Unbounded), oswald (Oswald), exo (Exo 2), mono (JetBrains Mono), cormorant (Cormorant), comfortaa (Comfortaa), russo (Russo One), wet-paint (Rubik Wet Paint), spray-paint (Rubik Spray Paint), glitch (Rubik Glitch), stalinist (Stalinist One), tektur (Tektur), jura (Jura), rubik-mono (Rubik Mono One).",
                        "enum": [
                          "segoe",
                          "bahnschrift",
                          "bahnschrift-narrow",
                          "montserrat",
                          "raleway",
                          "unbounded",
                          "oswald",
                          "exo",
                          "mono",
                          "cormorant",
                          "comfortaa",
                          "russo",
                          "wet-paint",
                          "spray-paint",
                          "glitch",
                          "stalinist",
                          "tektur",
                          "jura",
                          "rubik-mono"
                        ],
                        "type": "string"
                      },
                      "fit": {
                        "description": "Made smaller to fit the box rather than cut short.",
                        "type": "boolean"
                      },
                      "font": {
                        "maximum": 160.0,
                        "minimum": 6.0,
                        "type": "number"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "text": {
                        "description": "Words, with any of these in braces for what the program knows: {time}, {time.seconds}, {time.h}, {time.m}, {ampm}, {date}, {date.long}, {date.monthday}, {weekday}, {weekday.short}, {day}, {month}, {month.short}, {year}, {cpu}, {ram}, {ram.used}, {ram.total}, {gpu}, {net.down}, {net.up}, {battery}, {battery.state}, {uptime}, {media.title}, {media.artist}, {media.position}, {media.length}, {media.progress}, {volume}, {desk}, {desk.number}, {desk.count}, {preset}, {timer}, {rec.time}, {game.time}, {download}, {download.percent}, {download.progress}, {call.app}, {output}, {headset.battery}, {shelf}, {agent.state}, {agent.project}, {agent.say}, {agent.allow}, {agent.deny}; {disk.c}, {disk.c.free} for any drive letter; and {time@Tokyo Standard Time}, {offset@Tokyo Standard Time} for the time in a zone, by Windows' own id, and how far it is from yours.",
                        "maxLength": 200,
                        "type": "string"
                      },
                      "touch": {
                        "description": "What the words do as the pointer passes over them: smear as wet paint does and run back, or tear and split as a broken signal.",
                        "enum": [
                          "still",
                          "smear",
                          "glitch"
                        ]
                      },
                      "tracking": {
                        "description": "Room between the letters beyond the face's own, in ems.",
                        "maximum": 0.6000000238418579,
                        "minimum": -0.10000000149011612,
                        "type": "number"
                      },
                      "type": {
                        "const": "text"
                      },
                      "upper": {
                        "description": "In capitals, whatever the words are.",
                        "type": "boolean"
                      },
                      "weight": {
                        "maximum": 900,
                        "minimum": 100,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "text"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "track": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "type": {
                        "const": "bar"
                      },
                      "value": {
                        "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                        "enum": [
                          "cpu",
                          "ram",
                          "gpu",
                          "battery",
                          "volume",
                          "net.down",
                          "net.up",
                          "media.progress",
                          "download.progress"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "value"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "track": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "type": {
                        "const": "ring"
                      },
                      "value": {
                        "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                        "enum": [
                          "cpu",
                          "ram",
                          "gpu",
                          "battery",
                          "volume",
                          "net.down",
                          "net.up",
                          "media.progress",
                          "download.progress"
                        ],
                        "type": "string"
                      },
                      "width": {
                        "minimum": 1,
                        "type": "number"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "value"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "fill": {
                        "type": "boolean"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "seconds": {
                        "maximum": 600,
                        "minimum": 10,
                        "type": "integer"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "graph"
                      },
                      "value": {
                        "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                        "enum": [
                          "cpu",
                          "ram",
                          "gpu",
                          "battery",
                          "volume",
                          "net.down",
                          "net.up",
                          "media.progress",
                          "download.progress"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "value"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "glyph": {
                        "enum": [
                          "play",
                          "pause",
                          "stop",
                          "previous",
                          "next",
                          "volume",
                          "mute",
                          "clock",
                          "calendar",
                          "wifi",
                          "download",
                          "upload",
                          "battery",
                          "monitor",
                          "settings",
                          "home",
                          "star",
                          "music",
                          "video",
                          "game",
                          "sun",
                          "cloud",
                          "search",
                          "folder",
                          "mail",
                          "person",
                          "pin",
                          "stopwatch",
                          "chart",
                          "desks",
                          "power",
                          "heart",
                          "switch",
                          "terminal",
                          "back",
                          "forward"
                        ],
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "glyph"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "glyph"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "file": {
                        "pattern": "^[^\\\\/:.][^\\\\/:]*\\.([pP][nN][gG]|[sS][vV][gG])$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "image"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "file"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "action": {
                        "pattern": "^(media\\.toggle|media\\.next|media\\.previous|volume\\.mute|volume\\.up|volume\\.down|find-pointer|open|rec\\.pause|rec\\.stop|timer\\.pause|timer\\.stop|calendar\\.previous|calendar\\.next|calendar\\.today|media\\.player|agent\\.allow|agent\\.deny|desk:([1-9]|1[0-9]|20)|preset:([1-9]|1[0-9]|20)|timer\\.start:([1-9]|[1-9][0-9]|1[01][0-9]|120))$",
                        "type": "string"
                      },
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "bare": {
                        "description": "Its glyph or words alone, without the pad under them.",
                        "type": "boolean"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "glyph": {
                        "enum": [
                          "play",
                          "pause",
                          "stop",
                          "previous",
                          "next",
                          "volume",
                          "mute",
                          "clock",
                          "calendar",
                          "wifi",
                          "download",
                          "upload",
                          "battery",
                          "monitor",
                          "settings",
                          "home",
                          "star",
                          "music",
                          "video",
                          "game",
                          "sun",
                          "cloud",
                          "search",
                          "folder",
                          "mail",
                          "person",
                          "pin",
                          "stopwatch",
                          "chart",
                          "desks",
                          "power",
                          "heart",
                          "switch",
                          "terminal",
                          "back",
                          "forward"
                        ],
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "text": {
                        "maxLength": 60,
                        "type": "string"
                      },
                      "type": {
                        "const": "button"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size",
                      "action"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "desks"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "rect"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "dial": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(none|ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "face": {
                        "enum": [
                          "ticks",
                          "numbers",
                          "dots",
                          "bare"
                        ]
                      },
                      "hand": {
                        "description": "The second hand's colour.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "seconds": {
                        "type": "boolean"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "clock"
                      },
                      "zone": {
                        "description": "Windows' own id of a time zone, such as \"Tokyo Standard Time\" (tzutil /l lists them); none, the computer's own.",
                        "pattern": "^[A-Za-z0-9 .+()-]{1,64}$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "today": {
                        "description": "The ring round today.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "type": {
                        "const": "calendar"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "cover"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "at": {
                        "description": "Top left on the card, in points.",
                        "items": {
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "bars": {
                        "description": "How many bars, from the bass up.",
                        "maximum": 48,
                        "minimum": 4,
                        "type": "integer"
                      },
                      "colour": {
                        "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                        "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                        "type": "string"
                      },
                      "form": {
                        "description": "Bars standing on the foot, mirrored about the middle, a filled line over the tops, or columns of dots.",
                        "enum": [
                          "bars",
                          "mirror",
                          "line",
                          "dots"
                        ]
                      },
                      "opacity": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "radius": {
                        "maximum": 64,
                        "minimum": 0,
                        "type": "number"
                      },
                      "size": {
                        "description": "Width and height, in points; moved and cut to stay on the card.",
                        "items": {
                          "minimum": 1,
                          "type": "number"
                        },
                        "maxItems": 2,
                        "minItems": 2,
                        "type": "array"
                      },
                      "type": {
                        "const": "spectrum"
                      }
                    },
                    "required": [
                      "type",
                      "at",
                      "size"
                    ],
                    "type": "object"
                  }
                ]
              },
              "maxItems": 48,
              "type": "array"
            },
            "width": {
              "description": "How wide the side is, in points; it is as tall as the compact form (30 unless the look says).",
              "maximum": 64.0,
              "minimum": 12.0,
              "type": "number"
            }
          },
          "type": "object"
        }
      },
      "type": "object"
    },
    "edge": {
      "additionalProperties": false,
      "description": "The island's lower edge made to live, as a liquid. An activity may carry this alone, with no places. Version 2.",
      "properties": {
        "bead": {
          "description": "A bead let fall and drawn back when something good happens: a picture saved, a download done, something copied.",
          "type": "boolean"
        },
        "colour": {
          "description": "What stands out of the edge: the island's own colour, the accent, the cover of what plays, or light.",
          "enum": [
            "ink",
            "accent",
            "cover",
            "light"
          ],
          "type": "string"
        },
        "music": {
          "description": "While something plays: still, a row of spikes, the sound by pitch from low at the left to high at the right, a smooth wave running along the edge, or a drop falling on each strong beat.",
          "enum": [
            "none",
            "spikes",
            "spectrum",
            "wave",
            "drops"
          ],
          "type": "string"
        },
        "reach": {
          "description": "How far the edge reaches for the pointer below it, 0 not at all.",
          "maximum": 1,
          "minimum": 0,
          "type": "number"
        },
        "sag": {
          "description": "Sagging while nobody is at the computer.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "expanded": {
      "additionalProperties": false,
      "properties": {
        "height": {
          "description": "How tall the open panel is, in points; it is 344 wide.",
          "maximum": 160.0,
          "minimum": 24.0,
          "type": "number"
        },
        "items": {
          "items": {
            "oneOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "align": {
                    "enum": [
                      "start",
                      "middle",
                      "end"
                    ]
                  },
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "colour2": {
                    "description": "A colour the words fade to from left to right.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "family": {
                    "description": "This line's own family, over the widget's. One of: segoe (Segoe UI Variable), bahnschrift (Bahnschrift), bahnschrift-narrow (Bahnschrift), montserrat (Montserrat), raleway (Raleway), unbounded (Unbounded), oswald (Oswald), exo (Exo 2), mono (JetBrains Mono), cormorant (Cormorant), comfortaa (Comfortaa), russo (Russo One), wet-paint (Rubik Wet Paint), spray-paint (Rubik Spray Paint), glitch (Rubik Glitch), stalinist (Stalinist One), tektur (Tektur), jura (Jura), rubik-mono (Rubik Mono One).",
                    "enum": [
                      "segoe",
                      "bahnschrift",
                      "bahnschrift-narrow",
                      "montserrat",
                      "raleway",
                      "unbounded",
                      "oswald",
                      "exo",
                      "mono",
                      "cormorant",
                      "comfortaa",
                      "russo",
                      "wet-paint",
                      "spray-paint",
                      "glitch",
                      "stalinist",
                      "tektur",
                      "jura",
                      "rubik-mono"
                    ],
                    "type": "string"
                  },
                  "fit": {
                    "description": "Made smaller to fit the box rather than cut short.",
                    "type": "boolean"
                  },
                  "font": {
                    "maximum": 160.0,
                    "minimum": 6.0,
                    "type": "number"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "text": {
                    "description": "Words, with any of these in braces for what the program knows: {time}, {time.seconds}, {time.h}, {time.m}, {ampm}, {date}, {date.long}, {date.monthday}, {weekday}, {weekday.short}, {day}, {month}, {month.short}, {year}, {cpu}, {ram}, {ram.used}, {ram.total}, {gpu}, {net.down}, {net.up}, {battery}, {battery.state}, {uptime}, {media.title}, {media.artist}, {media.position}, {media.length}, {media.progress}, {volume}, {desk}, {desk.number}, {desk.count}, {preset}, {timer}, {rec.time}, {game.time}, {download}, {download.percent}, {download.progress}, {call.app}, {output}, {headset.battery}, {shelf}, {agent.state}, {agent.project}, {agent.say}, {agent.allow}, {agent.deny}; {disk.c}, {disk.c.free} for any drive letter; and {time@Tokyo Standard Time}, {offset@Tokyo Standard Time} for the time in a zone, by Windows' own id, and how far it is from yours.",
                    "maxLength": 200,
                    "type": "string"
                  },
                  "touch": {
                    "description": "What the words do as the pointer passes over them: smear as wet paint does and run back, or tear and split as a broken signal.",
                    "enum": [
                      "still",
                      "smear",
                      "glitch"
                    ]
                  },
                  "tracking": {
                    "description": "Room between the letters beyond the face's own, in ems.",
                    "maximum": 0.6000000238418579,
                    "minimum": -0.10000000149011612,
                    "type": "number"
                  },
                  "type": {
                    "const": "text"
                  },
                  "upper": {
                    "description": "In capitals, whatever the words are.",
                    "type": "boolean"
                  },
                  "weight": {
                    "maximum": 900,
                    "minimum": 100,
                    "type": "integer"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size",
                  "text"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "track": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "type": {
                    "const": "bar"
                  },
                  "value": {
                    "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                    "enum": [
                      "cpu",
                      "ram",
                      "gpu",
                      "battery",
                      "volume",
                      "net.down",
                      "net.up",
                      "media.progress",
                      "download.progress"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size",
                  "value"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "track": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "type": {
                    "const": "ring"
                  },
                  "value": {
                    "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                    "enum": [
                      "cpu",
                      "ram",
                      "gpu",
                      "battery",
                      "volume",
                      "net.down",
                      "net.up",
                      "media.progress",
                      "download.progress"
                    ],
                    "type": "string"
                  },
                  "width": {
                    "minimum": 1,
                    "type": "number"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size",
                  "value"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "fill": {
                    "type": "boolean"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "seconds": {
                    "maximum": 600,
                    "minimum": 10,
                    "type": "integer"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "type": {
                    "const": "graph"
                  },
                  "value": {
                    "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                    "enum": [
                      "cpu",
                      "ram",
                      "gpu",
                      "battery",
                      "volume",
                      "net.down",
                      "net.up",
                      "media.progress",
                      "download.progress"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size",
                  "value"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "glyph": {
                    "enum": [
                      "play",
                      "pause",
                      "stop",
                      "previous",
                      "next",
                      "volume",
                      "mute",
                      "clock",
                      "calendar",
                      "wifi",
                      "download",
                      "upload",
                      "battery",
                      "monitor",
                      "settings",
                      "home",
                      "star",
                      "music",
                      "video",
                      "game",
                      "sun",
                      "cloud",
                      "search",
                      "folder",
                      "mail",
                      "person",
                      "pin",
                      "stopwatch",
                      "chart",
                      "desks",
                      "power",
                      "heart",
                      "switch",
                      "terminal",
                      "back",
                      "forward"
                    ],
                    "type": "string"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "type": {
                    "const": "glyph"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size",
                  "glyph"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "file": {
                    "pattern": "^[^\\\\/:.][^\\\\/:]*\\.([pP][nN][gG]|[sS][vV][gG])$",
                    "type": "string"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "type": {
                    "const": "image"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size",
                  "file"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "action": {
                    "pattern": "^(media\\.toggle|media\\.next|media\\.previous|volume\\.mute|volume\\.up|volume\\.down|find-pointer|open|rec\\.pause|rec\\.stop|timer\\.pause|timer\\.stop|calendar\\.previous|calendar\\.next|calendar\\.today|media\\.player|agent\\.allow|agent\\.deny|desk:([1-9]|1[0-9]|20)|preset:([1-9]|1[0-9]|20)|timer\\.start:([1-9]|[1-9][0-9]|1[01][0-9]|120))$",
                    "type": "string"
                  },
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "bare": {
                    "description": "Its glyph or words alone, without the pad under them.",
                    "type": "boolean"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "glyph": {
                    "enum": [
                      "play",
                      "pause",
                      "stop",
                      "previous",
                      "next",
                      "volume",
                      "mute",
                      "clock",
                      "calendar",
                      "wifi",
                      "download",
                      "upload",
                      "battery",
                      "monitor",
                      "settings",
                      "home",
                      "star",
                      "music",
                      "video",
                      "game",
                      "sun",
                      "cloud",
                      "search",
                      "folder",
                      "mail",
                      "person",
                      "pin",
                      "stopwatch",
                      "chart",
                      "desks",
                      "power",
                      "heart",
                      "switch",
                      "terminal",
                      "back",
                      "forward"
                    ],
                    "type": "string"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "text": {
                    "maxLength": 60,
                    "type": "string"
                  },
                  "type": {
                    "const": "button"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size",
                  "action"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "type": {
                    "const": "desks"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "type": {
                    "const": "rect"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "dial": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(none|ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "face": {
                    "enum": [
                      "ticks",
                      "numbers",
                      "dots",
                      "bare"
                    ]
                  },
                  "hand": {
                    "description": "The second hand's colour.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "seconds": {
                    "type": "boolean"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "type": {
                    "const": "clock"
                  },
                  "zone": {
                    "description": "Windows' own id of a time zone, such as \"Tokyo Standard Time\" (tzutil /l lists them); none, the computer's own.",
                    "pattern": "^[A-Za-z0-9 .+()-]{1,64}$",
                    "type": "string"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "today": {
                    "description": "The ring round today.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "type": {
                    "const": "calendar"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "type": {
                    "const": "cover"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "at": {
                    "description": "Top left on the card, in points.",
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "bars": {
                    "description": "How many bars, from the bass up.",
                    "maximum": 48,
                    "minimum": 4,
                    "type": "integer"
                  },
                  "colour": {
                    "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                    "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                    "type": "string"
                  },
                  "form": {
                    "description": "Bars standing on the foot, mirrored about the middle, a filled line over the tops, or columns of dots.",
                    "enum": [
                      "bars",
                      "mirror",
                      "line",
                      "dots"
                    ]
                  },
                  "opacity": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "radius": {
                    "maximum": 64,
                    "minimum": 0,
                    "type": "number"
                  },
                  "size": {
                    "description": "Width and height, in points; moved and cut to stay on the card.",
                    "items": {
                      "minimum": 1,
                      "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                  },
                  "type": {
                    "const": "spectrum"
                  }
                },
                "required": [
                  "type",
                  "at",
                  "size"
                ],
                "type": "object"
              }
            ]
          },
          "maxItems": 48,
          "type": "array"
        }
      },
      "type": "object"
    },
    "family": {
      "enum": [
        "segoe",
        "bahnschrift",
        "bahnschrift-narrow",
        "montserrat",
        "raleway",
        "unbounded",
        "oswald",
        "exo",
        "mono",
        "cormorant",
        "comfortaa",
        "russo",
        "wet-paint",
        "spray-paint",
        "glitch",
        "stalinist",
        "tektur",
        "jura",
        "rubik-mono"
      ],
      "type": "string"
    },
    "jelly": {
      "additionalProperties": false,
      "description": "The island giving and springing back. An activity may carry this alone. Version 2.",
      "properties": {
        "amount": {
          "description": "How much it gives.",
          "maximum": 1,
          "minimum": 0,
          "type": "number"
        },
        "arrive": {
          "description": "When something new comes onto it.",
          "type": "boolean"
        },
        "open": {
          "description": "When it opens, closes, or goes from one form to another.",
          "type": "boolean"
        },
        "press": {
          "description": "Under a press.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "look": {
      "description": "The name of the file's own look, when it carries others. Version 2.",
      "maxLength": 48,
      "type": "string"
    },
    "looks": {
      "description": "Other ways the activity may look, each picked on the Island page. Version 2.",
      "items": {
        "additionalProperties": false,
        "properties": {
          "compact": {
            "additionalProperties": false,
            "properties": {
              "height": {
                "description": "How tall the compact form stands while this look shows, in points. Version 2.",
                "maximum": 44.0,
                "minimum": 30.0,
                "type": "number"
              },
              "leading": {
                "additionalProperties": false,
                "properties": {
                  "items": {
                    "items": {
                      "oneOf": [
                        {
                          "additionalProperties": false,
                          "properties": {
                            "align": {
                              "enum": [
                                "start",
                                "middle",
                                "end"
                              ]
                            },
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "colour2": {
                              "description": "A colour the words fade to from left to right.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "family": {
                              "description": "This line's own family, over the widget's. One of: segoe (Segoe UI Variable), bahnschrift (Bahnschrift), bahnschrift-narrow (Bahnschrift), montserrat (Montserrat), raleway (Raleway), unbounded (Unbounded), oswald (Oswald), exo (Exo 2), mono (JetBrains Mono), cormorant (Cormorant), comfortaa (Comfortaa), russo (Russo One), wet-paint (Rubik Wet Paint), spray-paint (Rubik Spray Paint), glitch (Rubik Glitch), stalinist (Stalinist One), tektur (Tektur), jura (Jura), rubik-mono (Rubik Mono One).",
                              "enum": [
                                "segoe",
                                "bahnschrift",
                                "bahnschrift-narrow",
                                "montserrat",
                                "raleway",
                                "unbounded",
                                "oswald",
                                "exo",
                                "mono",
                                "cormorant",
                                "comfortaa",
                                "russo",
                                "wet-paint",
                                "spray-paint",
                                "glitch",
                                "stalinist",
                                "tektur",
                                "jura",
                                "rubik-mono"
                              ],
                              "type": "string"
                            },
                            "fit": {
                              "description": "Made smaller to fit the box rather than cut short.",
                              "type": "boolean"
                            },
                            "font": {
                              "maximum": 160.0,
                              "minimum": 6.0,
                              "type": "number"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "text": {
                              "description": "Words, with any of these in braces for what the program knows: {time}, {time.seconds}, {time.h}, {time.m}, {ampm}, {date}, {date.long}, {date.monthday}, {weekday}, {weekday.short}, {day}, {month}, {month.short}, {year}, {cpu}, {ram}, {ram.used}, {ram.total}, {gpu}, {net.down}, {net.up}, {battery}, {battery.state}, {uptime}, {media.title}, {media.artist}, {media.position}, {media.length}, {media.progress}, {volume}, {desk}, {desk.number}, {desk.count}, {preset}, {timer}, {rec.time}, {game.time}, {download}, {download.percent}, {download.progress}, {call.app}, {output}, {headset.battery}, {shelf}, {agent.state}, {agent.project}, {agent.say}, {agent.allow}, {agent.deny}; {disk.c}, {disk.c.free} for any drive letter; and {time@Tokyo Standard Time}, {offset@Tokyo Standard Time} for the time in a zone, by Windows' own id, and how far it is from yours.",
                              "maxLength": 200,
                              "type": "string"
                            },
                            "touch": {
                              "description": "What the words do as the pointer passes over them: smear as wet paint does and run back, or tear and split as a broken signal.",
                              "enum": [
                                "still",
                                "smear",
                                "glitch"
                              ]
                            },
                            "tracking": {
                              "description": "Room between the letters beyond the face's own, in ems.",
                              "maximum": 0.6000000238418579,
                              "minimum": -0.10000000149011612,
                              "type": "number"
                            },
                            "type": {
                              "const": "text"
                            },
                            "upper": {
                              "description": "In capitals, whatever the words are.",
                              "type": "boolean"
                            },
                            "weight": {
                              "maximum": 900,
                              "minimum": 100,
                              "type": "integer"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "text"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "track": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "type": {
                              "const": "bar"
                            },
                            "value": {
                              "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                              "enum": [
                                "cpu",
                                "ram",
                                "gpu",
                                "battery",
                                "volume",
                                "net.down",
                                "net.up",
                                "media.progress",
                                "download.progress"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "value"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "track": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "type": {
                              "const": "ring"
                            },
                            "value": {
                              "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                              "enum": [
                                "cpu",
                                "ram",
                                "gpu",
                                "battery",
                                "volume",
                                "net.down",
                                "net.up",
                                "media.progress",
                                "download.progress"
                              ],
                              "type": "string"
                            },
                            "width": {
                              "minimum": 1,
                              "type": "number"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "value"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "fill": {
                              "type": "boolean"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "seconds": {
                              "maximum": 600,
                              "minimum": 10,
                              "type": "integer"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "graph"
                            },
                            "value": {
                              "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                              "enum": [
                                "cpu",
                                "ram",
                                "gpu",
                                "battery",
                                "volume",
                                "net.down",
                                "net.up",
                                "media.progress",
                                "download.progress"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "value"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "glyph": {
                              "enum": [
                                "play",
                                "pause",
                                "stop",
                                "previous",
                                "next",
                                "volume",
                                "mute",
                                "clock",
                                "calendar",
                                "wifi",
                                "download",
                                "upload",
                                "battery",
                                "monitor",
                                "settings",
                                "home",
                                "star",
                                "music",
                                "video",
                                "game",
                                "sun",
                                "cloud",
                                "search",
                                "folder",
                                "mail",
                                "person",
                                "pin",
                                "stopwatch",
                                "chart",
                                "desks",
                                "power",
                                "heart",
                                "switch",
                                "terminal",
                                "back",
                                "forward"
                              ],
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "glyph"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "glyph"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "file": {
                              "pattern": "^[^\\\\/:.][^\\\\/:]*\\.([pP][nN][gG]|[sS][vV][gG])$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "image"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "file"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "action": {
                              "pattern": "^(media\\.toggle|media\\.next|media\\.previous|volume\\.mute|volume\\.up|volume\\.down|find-pointer|open|rec\\.pause|rec\\.stop|timer\\.pause|timer\\.stop|calendar\\.previous|calendar\\.next|calendar\\.today|media\\.player|agent\\.allow|agent\\.deny|desk:([1-9]|1[0-9]|20)|preset:([1-9]|1[0-9]|20)|timer\\.start:([1-9]|[1-9][0-9]|1[01][0-9]|120))$",
                              "type": "string"
                            },
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "bare": {
                              "description": "Its glyph or words alone, without the pad under them.",
                              "type": "boolean"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "glyph": {
                              "enum": [
                                "play",
                                "pause",
                                "stop",
                                "previous",
                                "next",
                                "volume",
                                "mute",
                                "clock",
                                "calendar",
                                "wifi",
                                "download",
                                "upload",
                                "battery",
                                "monitor",
                                "settings",
                                "home",
                                "star",
                                "music",
                                "video",
                                "game",
                                "sun",
                                "cloud",
                                "search",
                                "folder",
                                "mail",
                                "person",
                                "pin",
                                "stopwatch",
                                "chart",
                                "desks",
                                "power",
                                "heart",
                                "switch",
                                "terminal",
                                "back",
                                "forward"
                              ],
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "text": {
                              "maxLength": 60,
                              "type": "string"
                            },
                            "type": {
                              "const": "button"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "action"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "desks"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "rect"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "dial": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(none|ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "face": {
                              "enum": [
                                "ticks",
                                "numbers",
                                "dots",
                                "bare"
                              ]
                            },
                            "hand": {
                              "description": "The second hand's colour.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "seconds": {
                              "type": "boolean"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "clock"
                            },
                            "zone": {
                              "description": "Windows' own id of a time zone, such as \"Tokyo Standard Time\" (tzutil /l lists them); none, the computer's own.",
                              "pattern": "^[A-Za-z0-9 .+()-]{1,64}$",
                              "type": "string"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "today": {
                              "description": "The ring round today.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "type": {
                              "const": "calendar"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "cover"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "bars": {
                              "description": "How many bars, from the bass up.",
                              "maximum": 48,
                              "minimum": 4,
                              "type": "integer"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "form": {
                              "description": "Bars standing on the foot, mirrored about the middle, a filled line over the tops, or columns of dots.",
                              "enum": [
                                "bars",
                                "mirror",
                                "line",
                                "dots"
                              ]
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "spectrum"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "maxItems": 48,
                    "type": "array"
                  },
                  "width": {
                    "description": "How wide the side is, in points; it is as tall as the compact form (30 unless the look says).",
                    "maximum": 64.0,
                    "minimum": 12.0,
                    "type": "number"
                  }
                },
                "type": "object"
              },
              "middle": {
                "additionalProperties": false,
                "description": "The middle of the compact form, in place of the island's own words (the time). Version 2.",
                "properties": {
                  "items": {
                    "items": {
                      "oneOf": [
                        {
                          "additionalProperties": false,
                          "properties": {
                            "align": {
                              "enum": [
                                "start",
                                "middle",
                                "end"
                              ]
                            },
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "colour2": {
                              "description": "A colour the words fade to from left to right.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "family": {
                              "description": "This line's own family, over the widget's. One of: segoe (Segoe UI Variable), bahnschrift (Bahnschrift), bahnschrift-narrow (Bahnschrift), montserrat (Montserrat), raleway (Raleway), unbounded (Unbounded), oswald (Oswald), exo (Exo 2), mono (JetBrains Mono), cormorant (Cormorant), comfortaa (Comfortaa), russo (Russo One), wet-paint (Rubik Wet Paint), spray-paint (Rubik Spray Paint), glitch (Rubik Glitch), stalinist (Stalinist One), tektur (Tektur), jura (Jura), rubik-mono (Rubik Mono One).",
                              "enum": [
                                "segoe",
                                "bahnschrift",
                                "bahnschrift-narrow",
                                "montserrat",
                                "raleway",
                                "unbounded",
                                "oswald",
                                "exo",
                                "mono",
                                "cormorant",
                                "comfortaa",
                                "russo",
                                "wet-paint",
                                "spray-paint",
                                "glitch",
                                "stalinist",
                                "tektur",
                                "jura",
                                "rubik-mono"
                              ],
                              "type": "string"
                            },
                            "fit": {
                              "description": "Made smaller to fit the box rather than cut short.",
                              "type": "boolean"
                            },
                            "font": {
                              "maximum": 160.0,
                              "minimum": 6.0,
                              "type": "number"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "text": {
                              "description": "Words, with any of these in braces for what the program knows: {time}, {time.seconds}, {time.h}, {time.m}, {ampm}, {date}, {date.long}, {date.monthday}, {weekday}, {weekday.short}, {day}, {month}, {month.short}, {year}, {cpu}, {ram}, {ram.used}, {ram.total}, {gpu}, {net.down}, {net.up}, {battery}, {battery.state}, {uptime}, {media.title}, {media.artist}, {media.position}, {media.length}, {media.progress}, {volume}, {desk}, {desk.number}, {desk.count}, {preset}, {timer}, {rec.time}, {game.time}, {download}, {download.percent}, {download.progress}, {call.app}, {output}, {headset.battery}, {shelf}, {agent.state}, {agent.project}, {agent.say}, {agent.allow}, {agent.deny}; {disk.c}, {disk.c.free} for any drive letter; and {time@Tokyo Standard Time}, {offset@Tokyo Standard Time} for the time in a zone, by Windows' own id, and how far it is from yours.",
                              "maxLength": 200,
                              "type": "string"
                            },
                            "touch": {
                              "description": "What the words do as the pointer passes over them: smear as wet paint does and run back, or tear and split as a broken signal.",
                              "enum": [
                                "still",
                                "smear",
                                "glitch"
                              ]
                            },
                            "tracking": {
                              "description": "Room between the letters beyond the face's own, in ems.",
                              "maximum": 0.6000000238418579,
                              "minimum": -0.10000000149011612,
                              "type": "number"
                            },
                            "type": {
                              "const": "text"
                            },
                            "upper": {
                              "description": "In capitals, whatever the words are.",
                              "type": "boolean"
                            },
                            "weight": {
                              "maximum": 900,
                              "minimum": 100,
                              "type": "integer"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "text"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "track": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "type": {
                              "const": "bar"
                            },
                            "value": {
                              "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                              "enum": [
                                "cpu",
                                "ram",
                                "gpu",
                                "battery",
                                "volume",
                                "net.down",
                                "net.up",
                                "media.progress",
                                "download.progress"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "value"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "track": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "type": {
                              "const": "ring"
                            },
                            "value": {
                              "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                              "enum": [
                                "cpu",
                                "ram",
                                "gpu",
                                "battery",
                                "volume",
                                "net.down",
                                "net.up",
                                "media.progress",
                                "download.progress"
                              ],
                              "type": "string"
                            },
                            "width": {
                              "minimum": 1,
                              "type": "number"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "value"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "fill": {
                              "type": "boolean"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "seconds": {
                              "maximum": 600,
                              "minimum": 10,
                              "type": "integer"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "graph"
                            },
                            "value": {
                              "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                              "enum": [
                                "cpu",
                                "ram",
                                "gpu",
                                "battery",
                                "volume",
                                "net.down",
                                "net.up",
                                "media.progress",
                                "download.progress"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "value"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "glyph": {
                              "enum": [
                                "play",
                                "pause",
                                "stop",
                                "previous",
                                "next",
                                "volume",
                                "mute",
                                "clock",
                                "calendar",
                                "wifi",
                                "download",
                                "upload",
                                "battery",
                                "monitor",
                                "settings",
                                "home",
                                "star",
                                "music",
                                "video",
                                "game",
                                "sun",
                                "cloud",
                                "search",
                                "folder",
                                "mail",
                                "person",
                                "pin",
                                "stopwatch",
                                "chart",
                                "desks",
                                "power",
                                "heart",
                                "switch",
                                "terminal",
                                "back",
                                "forward"
                              ],
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "glyph"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "glyph"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "file": {
                              "pattern": "^[^\\\\/:.][^\\\\/:]*\\.([pP][nN][gG]|[sS][vV][gG])$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "image"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "file"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "action": {
                              "pattern": "^(media\\.toggle|media\\.next|media\\.previous|volume\\.mute|volume\\.up|volume\\.down|find-pointer|open|rec\\.pause|rec\\.stop|timer\\.pause|timer\\.stop|calendar\\.previous|calendar\\.next|calendar\\.today|media\\.player|agent\\.allow|agent\\.deny|desk:([1-9]|1[0-9]|20)|preset:([1-9]|1[0-9]|20)|timer\\.start:([1-9]|[1-9][0-9]|1[01][0-9]|120))$",
                              "type": "string"
                            },
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "bare": {
                              "description": "Its glyph or words alone, without the pad under them.",
                              "type": "boolean"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "glyph": {
                              "enum": [
                                "play",
                                "pause",
                                "stop",
                                "previous",
                                "next",
                                "volume",
                                "mute",
                                "clock",
                                "calendar",
                                "wifi",
                                "download",
                                "upload",
                                "battery",
                                "monitor",
                                "settings",
                                "home",
                                "star",
                                "music",
                                "video",
                                "game",
                                "sun",
                                "cloud",
                                "search",
                                "folder",
                                "mail",
                                "person",
                                "pin",
                                "stopwatch",
                                "chart",
                                "desks",
                                "power",
                                "heart",
                                "switch",
                                "terminal",
                                "back",
                                "forward"
                              ],
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "text": {
                              "maxLength": 60,
                              "type": "string"
                            },
                            "type": {
                              "const": "button"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "action"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "desks"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "rect"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "dial": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(none|ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "face": {
                              "enum": [
                                "ticks",
                                "numbers",
                                "dots",
                                "bare"
                              ]
                            },
                            "hand": {
                              "description": "The second hand's colour.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "seconds": {
                              "type": "boolean"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "clock"
                            },
                            "zone": {
                              "description": "Windows' own id of a time zone, such as \"Tokyo Standard Time\" (tzutil /l lists them); none, the computer's own.",
                              "pattern": "^[A-Za-z0-9 .+()-]{1,64}$",
                              "type": "string"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "today": {
                              "description": "The ring round today.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "type": {
                              "const": "calendar"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "cover"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "bars": {
                              "description": "How many bars, from the bass up.",
                              "maximum": 48,
                              "minimum": 4,
                              "type": "integer"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "form": {
                              "description": "Bars standing on the foot, mirrored about the middle, a filled line over the tops, or columns of dots.",
                              "enum": [
                                "bars",
                                "mirror",
                                "line",
                                "dots"
                              ]
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "spectrum"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "maxItems": 48,
                    "type": "array"
                  },
                  "width": {
                    "description": "How wide the middle is, in points.",
                    "maximum": 220.0,
                    "minimum": 40.0,
                    "type": "number"
                  }
                },
                "type": "object"
              },
              "trailing": {
                "additionalProperties": false,
                "properties": {
                  "items": {
                    "items": {
                      "oneOf": [
                        {
                          "additionalProperties": false,
                          "properties": {
                            "align": {
                              "enum": [
                                "start",
                                "middle",
                                "end"
                              ]
                            },
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "colour2": {
                              "description": "A colour the words fade to from left to right.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "family": {
                              "description": "This line's own family, over the widget's. One of: segoe (Segoe UI Variable), bahnschrift (Bahnschrift), bahnschrift-narrow (Bahnschrift), montserrat (Montserrat), raleway (Raleway), unbounded (Unbounded), oswald (Oswald), exo (Exo 2), mono (JetBrains Mono), cormorant (Cormorant), comfortaa (Comfortaa), russo (Russo One), wet-paint (Rubik Wet Paint), spray-paint (Rubik Spray Paint), glitch (Rubik Glitch), stalinist (Stalinist One), tektur (Tektur), jura (Jura), rubik-mono (Rubik Mono One).",
                              "enum": [
                                "segoe",
                                "bahnschrift",
                                "bahnschrift-narrow",
                                "montserrat",
                                "raleway",
                                "unbounded",
                                "oswald",
                                "exo",
                                "mono",
                                "cormorant",
                                "comfortaa",
                                "russo",
                                "wet-paint",
                                "spray-paint",
                                "glitch",
                                "stalinist",
                                "tektur",
                                "jura",
                                "rubik-mono"
                              ],
                              "type": "string"
                            },
                            "fit": {
                              "description": "Made smaller to fit the box rather than cut short.",
                              "type": "boolean"
                            },
                            "font": {
                              "maximum": 160.0,
                              "minimum": 6.0,
                              "type": "number"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "text": {
                              "description": "Words, with any of these in braces for what the program knows: {time}, {time.seconds}, {time.h}, {time.m}, {ampm}, {date}, {date.long}, {date.monthday}, {weekday}, {weekday.short}, {day}, {month}, {month.short}, {year}, {cpu}, {ram}, {ram.used}, {ram.total}, {gpu}, {net.down}, {net.up}, {battery}, {battery.state}, {uptime}, {media.title}, {media.artist}, {media.position}, {media.length}, {media.progress}, {volume}, {desk}, {desk.number}, {desk.count}, {preset}, {timer}, {rec.time}, {game.time}, {download}, {download.percent}, {download.progress}, {call.app}, {output}, {headset.battery}, {shelf}, {agent.state}, {agent.project}, {agent.say}, {agent.allow}, {agent.deny}; {disk.c}, {disk.c.free} for any drive letter; and {time@Tokyo Standard Time}, {offset@Tokyo Standard Time} for the time in a zone, by Windows' own id, and how far it is from yours.",
                              "maxLength": 200,
                              "type": "string"
                            },
                            "touch": {
                              "description": "What the words do as the pointer passes over them: smear as wet paint does and run back, or tear and split as a broken signal.",
                              "enum": [
                                "still",
                                "smear",
                                "glitch"
                              ]
                            },
                            "tracking": {
                              "description": "Room between the letters beyond the face's own, in ems.",
                              "maximum": 0.6000000238418579,
                              "minimum": -0.10000000149011612,
                              "type": "number"
                            },
                            "type": {
                              "const": "text"
                            },
                            "upper": {
                              "description": "In capitals, whatever the words are.",
                              "type": "boolean"
                            },
                            "weight": {
                              "maximum": 900,
                              "minimum": 100,
                              "type": "integer"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "text"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "track": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "type": {
                              "const": "bar"
                            },
                            "value": {
                              "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                              "enum": [
                                "cpu",
                                "ram",
                                "gpu",
                                "battery",
                                "volume",
                                "net.down",
                                "net.up",
                                "media.progress",
                                "download.progress"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "value"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "track": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "type": {
                              "const": "ring"
                            },
                            "value": {
                              "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                              "enum": [
                                "cpu",
                                "ram",
                                "gpu",
                                "battery",
                                "volume",
                                "net.down",
                                "net.up",
                                "media.progress",
                                "download.progress"
                              ],
                              "type": "string"
                            },
                            "width": {
                              "minimum": 1,
                              "type": "number"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "value"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "fill": {
                              "type": "boolean"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "seconds": {
                              "maximum": 600,
                              "minimum": 10,
                              "type": "integer"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "graph"
                            },
                            "value": {
                              "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                              "enum": [
                                "cpu",
                                "ram",
                                "gpu",
                                "battery",
                                "volume",
                                "net.down",
                                "net.up",
                                "media.progress",
                                "download.progress"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "value"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "glyph": {
                              "enum": [
                                "play",
                                "pause",
                                "stop",
                                "previous",
                                "next",
                                "volume",
                                "mute",
                                "clock",
                                "calendar",
                                "wifi",
                                "download",
                                "upload",
                                "battery",
                                "monitor",
                                "settings",
                                "home",
                                "star",
                                "music",
                                "video",
                                "game",
                                "sun",
                                "cloud",
                                "search",
                                "folder",
                                "mail",
                                "person",
                                "pin",
                                "stopwatch",
                                "chart",
                                "desks",
                                "power",
                                "heart",
                                "switch",
                                "terminal",
                                "back",
                                "forward"
                              ],
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "glyph"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "glyph"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "file": {
                              "pattern": "^[^\\\\/:.][^\\\\/:]*\\.([pP][nN][gG]|[sS][vV][gG])$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "image"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "file"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "action": {
                              "pattern": "^(media\\.toggle|media\\.next|media\\.previous|volume\\.mute|volume\\.up|volume\\.down|find-pointer|open|rec\\.pause|rec\\.stop|timer\\.pause|timer\\.stop|calendar\\.previous|calendar\\.next|calendar\\.today|media\\.player|agent\\.allow|agent\\.deny|desk:([1-9]|1[0-9]|20)|preset:([1-9]|1[0-9]|20)|timer\\.start:([1-9]|[1-9][0-9]|1[01][0-9]|120))$",
                              "type": "string"
                            },
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "bare": {
                              "description": "Its glyph or words alone, without the pad under them.",
                              "type": "boolean"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "glyph": {
                              "enum": [
                                "play",
                                "pause",
                                "stop",
                                "previous",
                                "next",
                                "volume",
                                "mute",
                                "clock",
                                "calendar",
                                "wifi",
                                "download",
                                "upload",
                                "battery",
                                "monitor",
                                "settings",
                                "home",
                                "star",
                                "music",
                                "video",
                                "game",
                                "sun",
                                "cloud",
                                "search",
                                "folder",
                                "mail",
                                "person",
                                "pin",
                                "stopwatch",
                                "chart",
                                "desks",
                                "power",
                                "heart",
                                "switch",
                                "terminal",
                                "back",
                                "forward"
                              ],
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "text": {
                              "maxLength": 60,
                              "type": "string"
                            },
                            "type": {
                              "const": "button"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size",
                            "action"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "desks"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "rect"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "dial": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(none|ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "face": {
                              "enum": [
                                "ticks",
                                "numbers",
                                "dots",
                                "bare"
                              ]
                            },
                            "hand": {
                              "description": "The second hand's colour.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "seconds": {
                              "type": "boolean"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "clock"
                            },
                            "zone": {
                              "description": "Windows' own id of a time zone, such as \"Tokyo Standard Time\" (tzutil /l lists them); none, the computer's own.",
                              "pattern": "^[A-Za-z0-9 .+()-]{1,64}$",
                              "type": "string"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "today": {
                              "description": "The ring round today.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "type": {
                              "const": "calendar"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "cover"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "at": {
                              "description": "Top left on the card, in points.",
                              "items": {
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "bars": {
                              "description": "How many bars, from the bass up.",
                              "maximum": 48,
                              "minimum": 4,
                              "type": "integer"
                            },
                            "colour": {
                              "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                              "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                              "type": "string"
                            },
                            "form": {
                              "description": "Bars standing on the foot, mirrored about the middle, a filled line over the tops, or columns of dots.",
                              "enum": [
                                "bars",
                                "mirror",
                                "line",
                                "dots"
                              ]
                            },
                            "opacity": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "radius": {
                              "maximum": 64,
                              "minimum": 0,
                              "type": "number"
                            },
                            "size": {
                              "description": "Width and height, in points; moved and cut to stay on the card.",
                              "items": {
                                "minimum": 1,
                                "type": "number"
                              },
                              "maxItems": 2,
                              "minItems": 2,
                              "type": "array"
                            },
                            "type": {
                              "const": "spectrum"
                            }
                          },
                          "required": [
                            "type",
                            "at",
                            "size"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "maxItems": 48,
                    "type": "array"
                  },
                  "width": {
                    "description": "How wide the side is, in points; it is as tall as the compact form (30 unless the look says).",
                    "maximum": 64.0,
                    "minimum": 12.0,
                    "type": "number"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "edge": {
            "$ref": "#/properties/edge"
          },
          "expanded": {
            "additionalProperties": false,
            "properties": {
              "height": {
                "description": "How tall the open panel is, in points; it is 344 wide.",
                "maximum": 160.0,
                "minimum": 24.0,
                "type": "number"
              },
              "items": {
                "items": {
                  "oneOf": [
                    {
                      "additionalProperties": false,
                      "properties": {
                        "align": {
                          "enum": [
                            "start",
                            "middle",
                            "end"
                          ]
                        },
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "colour2": {
                          "description": "A colour the words fade to from left to right.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "family": {
                          "description": "This line's own family, over the widget's. One of: segoe (Segoe UI Variable), bahnschrift (Bahnschrift), bahnschrift-narrow (Bahnschrift), montserrat (Montserrat), raleway (Raleway), unbounded (Unbounded), oswald (Oswald), exo (Exo 2), mono (JetBrains Mono), cormorant (Cormorant), comfortaa (Comfortaa), russo (Russo One), wet-paint (Rubik Wet Paint), spray-paint (Rubik Spray Paint), glitch (Rubik Glitch), stalinist (Stalinist One), tektur (Tektur), jura (Jura), rubik-mono (Rubik Mono One).",
                          "enum": [
                            "segoe",
                            "bahnschrift",
                            "bahnschrift-narrow",
                            "montserrat",
                            "raleway",
                            "unbounded",
                            "oswald",
                            "exo",
                            "mono",
                            "cormorant",
                            "comfortaa",
                            "russo",
                            "wet-paint",
                            "spray-paint",
                            "glitch",
                            "stalinist",
                            "tektur",
                            "jura",
                            "rubik-mono"
                          ],
                          "type": "string"
                        },
                        "fit": {
                          "description": "Made smaller to fit the box rather than cut short.",
                          "type": "boolean"
                        },
                        "font": {
                          "maximum": 160.0,
                          "minimum": 6.0,
                          "type": "number"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "text": {
                          "description": "Words, with any of these in braces for what the program knows: {time}, {time.seconds}, {time.h}, {time.m}, {ampm}, {date}, {date.long}, {date.monthday}, {weekday}, {weekday.short}, {day}, {month}, {month.short}, {year}, {cpu}, {ram}, {ram.used}, {ram.total}, {gpu}, {net.down}, {net.up}, {battery}, {battery.state}, {uptime}, {media.title}, {media.artist}, {media.position}, {media.length}, {media.progress}, {volume}, {desk}, {desk.number}, {desk.count}, {preset}, {timer}, {rec.time}, {game.time}, {download}, {download.percent}, {download.progress}, {call.app}, {output}, {headset.battery}, {shelf}, {agent.state}, {agent.project}, {agent.say}, {agent.allow}, {agent.deny}; {disk.c}, {disk.c.free} for any drive letter; and {time@Tokyo Standard Time}, {offset@Tokyo Standard Time} for the time in a zone, by Windows' own id, and how far it is from yours.",
                          "maxLength": 200,
                          "type": "string"
                        },
                        "touch": {
                          "description": "What the words do as the pointer passes over them: smear as wet paint does and run back, or tear and split as a broken signal.",
                          "enum": [
                            "still",
                            "smear",
                            "glitch"
                          ]
                        },
                        "tracking": {
                          "description": "Room between the letters beyond the face's own, in ems.",
                          "maximum": 0.6000000238418579,
                          "minimum": -0.10000000149011612,
                          "type": "number"
                        },
                        "type": {
                          "const": "text"
                        },
                        "upper": {
                          "description": "In capitals, whatever the words are.",
                          "type": "boolean"
                        },
                        "weight": {
                          "maximum": 900,
                          "minimum": 100,
                          "type": "integer"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size",
                        "text"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "track": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "type": {
                          "const": "bar"
                        },
                        "value": {
                          "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                          "enum": [
                            "cpu",
                            "ram",
                            "gpu",
                            "battery",
                            "volume",
                            "net.down",
                            "net.up",
                            "media.progress",
                            "download.progress"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size",
                        "value"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "track": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "type": {
                          "const": "ring"
                        },
                        "value": {
                          "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                          "enum": [
                            "cpu",
                            "ram",
                            "gpu",
                            "battery",
                            "volume",
                            "net.down",
                            "net.up",
                            "media.progress",
                            "download.progress"
                          ],
                          "type": "string"
                        },
                        "width": {
                          "minimum": 1,
                          "type": "number"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size",
                        "value"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "fill": {
                          "type": "boolean"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "seconds": {
                          "maximum": 600,
                          "minimum": 10,
                          "type": "integer"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "type": {
                          "const": "graph"
                        },
                        "value": {
                          "description": "A number the program knows, 0 to 100 (the network's in bytes a second).",
                          "enum": [
                            "cpu",
                            "ram",
                            "gpu",
                            "battery",
                            "volume",
                            "net.down",
                            "net.up",
                            "media.progress",
                            "download.progress"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size",
                        "value"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "glyph": {
                          "enum": [
                            "play",
                            "pause",
                            "stop",
                            "previous",
                            "next",
                            "volume",
                            "mute",
                            "clock",
                            "calendar",
                            "wifi",
                            "download",
                            "upload",
                            "battery",
                            "monitor",
                            "settings",
                            "home",
                            "star",
                            "music",
                            "video",
                            "game",
                            "sun",
                            "cloud",
                            "search",
                            "folder",
                            "mail",
                            "person",
                            "pin",
                            "stopwatch",
                            "chart",
                            "desks",
                            "power",
                            "heart",
                            "switch",
                            "terminal",
                            "back",
                            "forward"
                          ],
                          "type": "string"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "type": {
                          "const": "glyph"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size",
                        "glyph"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "file": {
                          "pattern": "^[^\\\\/:.][^\\\\/:]*\\.([pP][nN][gG]|[sS][vV][gG])$",
                          "type": "string"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "type": {
                          "const": "image"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size",
                        "file"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "action": {
                          "pattern": "^(media\\.toggle|media\\.next|media\\.previous|volume\\.mute|volume\\.up|volume\\.down|find-pointer|open|rec\\.pause|rec\\.stop|timer\\.pause|timer\\.stop|calendar\\.previous|calendar\\.next|calendar\\.today|media\\.player|agent\\.allow|agent\\.deny|desk:([1-9]|1[0-9]|20)|preset:([1-9]|1[0-9]|20)|timer\\.start:([1-9]|[1-9][0-9]|1[01][0-9]|120))$",
                          "type": "string"
                        },
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "bare": {
                          "description": "Its glyph or words alone, without the pad under them.",
                          "type": "boolean"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "glyph": {
                          "enum": [
                            "play",
                            "pause",
                            "stop",
                            "previous",
                            "next",
                            "volume",
                            "mute",
                            "clock",
                            "calendar",
                            "wifi",
                            "download",
                            "upload",
                            "battery",
                            "monitor",
                            "settings",
                            "home",
                            "star",
                            "music",
                            "video",
                            "game",
                            "sun",
                            "cloud",
                            "search",
                            "folder",
                            "mail",
                            "person",
                            "pin",
                            "stopwatch",
                            "chart",
                            "desks",
                            "power",
                            "heart",
                            "switch",
                            "terminal",
                            "back",
                            "forward"
                          ],
                          "type": "string"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "text": {
                          "maxLength": 60,
                          "type": "string"
                        },
                        "type": {
                          "const": "button"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size",
                        "action"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "type": {
                          "const": "desks"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "type": {
                          "const": "rect"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "dial": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(none|ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "face": {
                          "enum": [
                            "ticks",
                            "numbers",
                            "dots",
                            "bare"
                          ]
                        },
                        "hand": {
                          "description": "The second hand's colour.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "seconds": {
                          "type": "boolean"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "type": {
                          "const": "clock"
                        },
                        "zone": {
                          "description": "Windows' own id of a time zone, such as \"Tokyo Standard Time\" (tzutil /l lists them); none, the computer's own.",
                          "pattern": "^[A-Za-z0-9 .+()-]{1,64}$",
                          "type": "string"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "today": {
                          "description": "The ring round today.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "type": {
                          "const": "calendar"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "type": {
                          "const": "cover"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "at": {
                          "description": "Top left on the card, in points.",
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "bars": {
                          "description": "How many bars, from the bass up.",
                          "maximum": 48,
                          "minimum": 4,
                          "type": "integer"
                        },
                        "colour": {
                          "description": "A colour word: ink and ink-2 (the card's text, light or dark to suit it), steel or accent with a shade 1 to 5 (lightest to darkest), or #rrggbb; /0.5 after any makes it see-through.",
                          "pattern": "^(ink|ink-2|steel(:[1-5])?|accent(:[1-5])?|#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))(/(0(\\.[0-9]+)?|1(\\.0+)?))?$",
                          "type": "string"
                        },
                        "form": {
                          "description": "Bars standing on the foot, mirrored about the middle, a filled line over the tops, or columns of dots.",
                          "enum": [
                            "bars",
                            "mirror",
                            "line",
                            "dots"
                          ]
                        },
                        "opacity": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "radius": {
                          "maximum": 64,
                          "minimum": 0,
                          "type": "number"
                        },
                        "size": {
                          "description": "Width and height, in points; moved and cut to stay on the card.",
                          "items": {
                            "minimum": 1,
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        },
                        "type": {
                          "const": "spectrum"
                        }
                      },
                      "required": [
                        "type",
                        "at",
                        "size"
                      ],
                      "type": "object"
                    }
                  ]
                },
                "maxItems": 48,
                "type": "array"
              }
            },
            "type": "object"
          },
          "look": {
            "maxLength": 48,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "look"
        ],
        "type": "object"
      },
      "maxItems": 3,
      "type": "array"
    },
    "name": {
      "maxLength": 64,
      "minLength": 1,
      "type": "string"
    },
    "sheen": {
      "additionalProperties": false,
      "description": "Light on the island's rim. An activity may carry this alone. Version 2.",
      "properties": {
        "colour": {
          "enum": [
            "ink",
            "accent",
            "cover",
            "light"
          ],
          "type": "string"
        },
        "events": {
          "description": "A line of light running round the rim when something happens.",
          "type": "boolean"
        },
        "pointer": {
          "description": "The glass catching the light where the pointer is near.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "split": {
      "additionalProperties": false,
      "description": "A second thing going on leaves the island as a drop on a liquid neck, and goes back into it the same way. Version 2.",
      "properties": {
        "stretch": {
          "description": "How long a neck it pulls before it lets go.",
          "maximum": 1,
          "minimum": 0,
          "type": "number"
        }
      },
      "type": "object"
    },
    "version": {
      "maximum": 2,
      "minimum": 1,
      "type": "integer"
    },
    "when": {
      "description": "always; while something plays; while recording; while a timer runs; while a preset runs; while charging; while the battery is low. Shown in place of the island's own for the same thing.",
      "enum": [
        "always",
        "media.playing",
        "rec.on",
        "timer.on",
        "preset.on",
        "battery.charging",
        "battery.low",
        "game.on",
        "call.on",
        "download.on",
        "shelf.on",
        "agent.on"
      ],
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "title": "Stillward Display island activity",
  "type": "object"
}
