{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://embed.coras.io/brand.schema.json",
  "title": "Coras brand",
  "description": "A brand for the Coras embed, emails and e-tickets. Fields are grouped by the surface they colour; every field is optional and falls back to the Coras default.",
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string"
    },
    "schemaVersion": {
      "const": 1,
      "description": "The contract version this file was written for"
    },
    "colorScheme": {
      "enum": [
        "light",
        "dark",
        "inherit"
      ],
      "description": "The scheme the brand renders in where nothing else decides it, such as email"
    },
    "fontFaces": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "weight": {
            "type": "integer",
            "minimum": 100,
            "maximum": 900
          },
          "url": {
            "type": "string"
          },
          "style": {
            "enum": [
              "normal",
              "italic"
            ]
          },
          "family": {
            "type": "string"
          }
        },
        "required": [
          "weight",
          "url"
        ],
        "additionalProperties": false
      }
    },
    "primary": {
      "type": "string",
      "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
      "description": "Primary Brand Colour. Used on key brand identifiers: buttons, ratings stars, selected states",
      "default": "#4657d4"
    },
    "secondary": {
      "type": "string",
      "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
      "description": "Secondary Brand Colour. Used on supporting brand elements and secondary buttons",
      "default": "#161c44"
    },
    "radius": {
      "type": "string",
      "pattern": "^(?:0|(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|%|vw|vh|ch))$",
      "description": "Corner Radius. Defines the corner radius of Cards, Images and Containers. Buttons and chips default to this value but can be customised below if desired.",
      "default": "1.5rem"
    },
    "font": {
      "type": "string",
      "minLength": 1,
      "description": "Font. Font for all text (add hosted files under the custom font option)",
      "default": "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\""
    },
    "headingFont": {
      "type": "string",
      "minLength": 1,
      "description": "Heading font. Font for page, section and card headings (follows Font until set)",
      "default": "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\""
    },
    "headingScale": {
      "type": "string",
      "pattern": "^(?:[0-3](?:\\.\\d+)?|4(?:\\.0+)?|0?\\.(?:2[5-9]|[3-9]\\d*))$",
      "description": "Heading size. Scales every heading together: 1 is the standard size, 1.25 is 25% larger",
      "default": "1"
    },
    "logoHeight": {
      "type": "string",
      "pattern": "^(?:0|(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|%|vw|vh|ch))$",
      "description": "Logo Height. How tall the logo renders in the navbar and email header",
      "default": "2rem"
    },
    "primaryTint": {
      "type": "string",
      "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
      "description": "Primary tint. The pale primary fill behind selected chips and highlights",
      "default": "#fcfcff"
    },
    "secondaryTint": {
      "type": "string",
      "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
      "description": "Secondary tint. The pale secondary fill behind selected options",
      "default": "#e8e8ec"
    },
    "logo": {
      "type": "string",
      "description": "Brand logo. The mark for light backgrounds. A surface that is always light draws it (the e-ticket PDF, a light brand's order confirmation email), so a brand that renders dark on the web still needs one"
    },
    "logoDark": {
      "type": "string",
      "description": "Dark logo. The mark for dark backgrounds, drawn whenever the components render dark"
    },
    "page": {
      "type": "object",
      "properties": {
        "background": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Page Background Colour. The main page background behind all content; transparent by default so the embed adopts the host page background",
          "default": "#ffffff"
        },
        "text": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Body Text Colour. All body copy; auto-suggested to stay readable on the page background",
          "default": "#161c44"
        },
        "textMuted": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Muted Text Colour. Field labels, placeholders, captions and hints; auto-suggested as a softened blend of text and background",
          "default": "#888888"
        },
        "link": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Link Text Colour. This follows the Text Button Colour, which itself defaults to the Primary Brand Colour. Adjust here if desired.",
          "default": "#4657d4"
        },
        "icon": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Icon Colour (In Page). This defaults to the Body Text Colour but can be adjusted here if desired",
          "default": "#161c44"
        },
        "focusRing": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Keyboard focus ring. The outline shown around controls when navigating with a keyboard",
          "default": "#4657d4"
        },
        "scrim": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Overlay dim. The darkened backdrop behind dialogs, drawers and popups",
          "default": "#000000"
        },
        "divider": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Dividing Lines. Hairline rules between sections and list items, on the web and in emails",
          "default": "#e6e6e6"
        }
      },
      "additionalProperties": false
    },
    "card": {
      "type": "object",
      "properties": {
        "background": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Card Fill Colour. Cards, panels, and the price/options section backgrounds",
          "default": "#fcfcff"
        },
        "border": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Card Border Colour. Borders around cards and panels",
          "default": "#e6e6e6"
        },
        "shadow": {
          "type": "string",
          "description": "Card Shadow. The large soft shadow under cards (set to none for a flat look)",
          "default": "0px 24px 24px rgba(0, 0, 0, 0.04)"
        },
        "softShadow": {
          "type": "string",
          "description": "Container Shadow. The subtle shadow on smaller raised elements",
          "default": "0px 4px 4px rgba(0, 0, 0, 0.04)"
        }
      },
      "additionalProperties": false
    },
    "field": {
      "type": "object",
      "properties": {
        "background": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Field / Input Fill Colour. The inside of text fields, dropdown triggers, the card fields on the payment page, and the ticket, time and language selection controls",
          "default": "#ffffff"
        },
        "border": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Field / Input Border Colour. Borders of text fields, dropdown triggers and other form inputs",
          "default": "#cccccc"
        },
        "radius": {
          "type": "string",
          "pattern": "^(?:0|(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|%|vw|vh|ch))$",
          "description": "Field / Input Corners. Corner radius for text fields, form inputs, the landing selectors and the ticket selector. Deliberately independent of Corner Radius, so a very round brand keeps usable field shapes.",
          "default": "0.5rem"
        }
      },
      "additionalProperties": false
    },
    "menu": {
      "type": "object",
      "properties": {
        "background": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Menu / Dropdown Fill Colour. The panel behind dropdown menus: the basket, currency, language, sort by, location results and the calendar",
          "default": "#ffffff"
        },
        "border": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Menu / Dropdown Border Colour. The outline around a dropdown menu panel",
          "default": "#e6e6e6"
        }
      },
      "additionalProperties": false
    },
    "primaryButton": {
      "type": "object",
      "properties": {
        "background": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Primary Button Fill Colour. This defaults to the Primary Brand Colour but can be adjusted here if required",
          "default": "#4657d4"
        },
        "text": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Primary Button Text Colour. There is an auto suggested value here to maintain legibility and contrast. This can be adjusted if desired.",
          "default": "#ffffff"
        },
        "hover": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Primary button - hover. The primary button while the pointer hovers over it",
          "default": "#3f4ebf"
        },
        "pressed": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Primary button - pressed. The primary button while it is being clicked",
          "default": "#3947ae"
        },
        "border": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Primary Button Border. This defaults to Transparent/No border. You can add a border colour here if desired.",
          "default": "transparent"
        }
      },
      "additionalProperties": false
    },
    "secondaryButton": {
      "type": "object",
      "properties": {
        "background": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Secondary Button Fill Colour. This defaults to the Secondary Brand Colour but can be adjusted here if required",
          "default": "#161c44"
        },
        "text": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Secondary Button Text Colour. There is an auto suggested value here to maintain legibility and contrast. This can be adjusted if desired.",
          "default": "#ffffff"
        },
        "hover": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Secondary button - hover. The secondary button while the pointer hovers over it",
          "default": "#14193d"
        },
        "pressed": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Secondary button - pressed. The secondary button while it is being clicked",
          "default": "#121738"
        },
        "border": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Secondary Button Border. This defaults to Transparent/No border. You can add a border colour here if desired.",
          "default": "transparent"
        }
      },
      "additionalProperties": false
    },
    "button": {
      "type": "object",
      "properties": {
        "textButton": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Text Button Colour. This defaults to the Primary Brand Colour. It can be adjusted here if required.",
          "default": "#4657d4"
        },
        "disabled": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Disabled Buttons. Default values applied. You can adjust here if desired",
          "default": "#aaaaaa"
        },
        "shadow": {
          "type": "string",
          "description": "Button Shadow. Default values applied. Set values to 0 if not required",
          "default": "0px 4px 4px rgba(0, 0, 0, 0.1)"
        },
        "hoverOnLightFill": {
          "type": "string",
          "pattern": "^(?:0|(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|%|vw|vh|ch))$",
          "description": "On Hover - Light / Bright Fill Button. Strength of the black overlay applied on hover when the button fill is light. Default values applied. Adjust if desired.",
          "default": "20%"
        },
        "hoverOnDarkFill": {
          "type": "string",
          "pattern": "^(?:0|(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|%|vw|vh|ch))$",
          "description": "On Hover - Dark Fill Button. Strength of the white overlay applied on hover when the button fill is dark. Default values applied. Adjust if desired.",
          "default": "20%"
        },
        "radius": {
          "type": "string",
          "pattern": "^(?:0|(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|%|vw|vh|ch))$",
          "description": "Button Corners. Corner radius for buttons (follows Corner Radius until set)",
          "default": "1.5rem"
        }
      },
      "additionalProperties": false
    },
    "chip": {
      "type": "object",
      "properties": {
        "radius": {
          "type": "string",
          "pattern": "^(?:0|(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|%|vw|vh|ch))$",
          "description": "Chip Corners. Corner radius for filter and option chips (follows Corner Radius until set)",
          "default": "1.5rem"
        }
      },
      "additionalProperties": false
    },
    "search": {
      "type": "object",
      "properties": {
        "radius": {
          "type": "string",
          "pattern": "^(?:0|(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|%|vw|vh|ch))$",
          "description": "Search Field Corners. Corner radius for the nav search and the location search field",
          "default": "100px"
        }
      },
      "additionalProperties": false
    },
    "navbar": {
      "type": "object",
      "properties": {
        "background": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Background Colour. Navbar background (independent of the page background)",
          "default": "#ffffff"
        },
        "backgroundImage": {
          "type": "string",
          "pattern": "^(?:none|(?:linear|radial)-gradient\\(.*\\))$",
          "description": "Background Gradient. Optional gradient painted over the Background Colour on the web. The mobile menu, the border and emails keep the solid colour",
          "default": "none"
        },
        "text": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Text Colour. Navbar labels and menu text",
          "default": "#000000"
        },
        "icon": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Nav Bar Icon Colour. This defaults to the Text Colour selected for the Navigation Bar but can be adjusted here if required",
          "default": "#000000"
        },
        "border": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Bottom Border. This defaults to the Background Colour but can be adjusted here if a trim is required",
          "default": "#ffffff"
        },
        "shadow": {
          "type": "string",
          "description": "Drop Shadow. Default values applied. Set values to 0 if not required",
          "default": "0 4px 4px 0 rgba(0, 0, 0, 0.04)"
        },
        "logo": {
          "type": "string",
          "description": "Navbar logo. Keyed to the surface, not the colour scheme: a navbar can be dark on a light page, which the dark logo cannot express. Unset keeps the scheme-chosen logo"
        }
      },
      "additionalProperties": false
    },
    "footer": {
      "type": "object",
      "properties": {
        "background": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Background Colour. Footer background, on the web and in emails",
          "default": "#e6e6e6"
        },
        "backgroundImage": {
          "type": "string",
          "pattern": "^(?:none|(?:linear|radial)-gradient\\(.*\\))$",
          "description": "Background Gradient. Optional gradient painted over the Background Colour on the web. The border and emails keep the solid colour",
          "default": "none"
        },
        "text": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Text Colour. Footer text, on the web and in emails",
          "default": "#000000"
        },
        "link": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Links. Footer links (follows Footer text until set)",
          "default": "#000000"
        },
        "border": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Top Border. This defaults to the Background Colour but can be adjusted here if a trim is required",
          "default": "#e6e6e6"
        },
        "paddingBottom": {
          "type": "string",
          "pattern": "^(?:0|(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|%|vw|vh|ch))$",
          "description": "Footer Padding Bottom. The space under the footer content, for a taller footer",
          "default": "2rem"
        },
        "logo": {
          "type": "string",
          "description": "Footer logo. Shown in the order confirmation email's footer. Unset keeps the scheme-chosen logo"
        }
      },
      "additionalProperties": false
    },
    "status": {
      "type": "object",
      "properties": {
        "error": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Error colour. Errors, destructive actions and the Music category tag",
          "default": "#c9224a"
        },
        "errorBackground": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Error background. The pale fill behind error alerts and tags",
          "default": "#fae9ed"
        },
        "success": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Success colour. Success messages and the Sport category tag",
          "default": "#00ad8f"
        },
        "successBackground": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Success background. The pale fill behind success alerts and tags",
          "default": "#e6f7f4"
        },
        "warning": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Warning colour. Warnings and the Theatre category tag",
          "default": "#ed8f1c"
        },
        "warningBackground": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Warning background. The pale fill behind warning alerts and tags",
          "default": "#fdf4e8"
        },
        "info": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Info colour. Info messages, reservation timers, Activity tags and marketing tags",
          "default": "#670c93"
        },
        "infoBackground": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Info background. The pale fill behind info alerts and Activity tags",
          "default": "#f0e7f4"
        }
      },
      "additionalProperties": false
    },
    "neutral": {
      "type": "object",
      "properties": {
        "50": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Grey 50 (lightest). Near-white: skeletons and sunken areas",
          "default": "#f5f5f5"
        },
        "100": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Grey 100. Very light grey fills",
          "default": "#eeeeee"
        },
        "200": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Grey 200. Light grey fills and empty states",
          "default": "#e6e6e6"
        },
        "300": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Grey 300. Soft borders and inactive elements",
          "default": "#dddddd"
        },
        "400": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Grey 400. Mid-light grey lines",
          "default": "#cccccc"
        },
        "500": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Grey 500. Mid grey: inactive icons and controls",
          "default": "#aaaaaa"
        },
        "600": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Grey 600. Mid-dark grey text",
          "default": "#888888"
        },
        "700": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Grey 700. Dark grey text",
          "default": "#666666"
        },
        "800": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Grey 800. Very dark grey",
          "default": "#444444"
        },
        "900": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$",
          "description": "Grey 900 (darkest). Near-black",
          "default": "#292929"
        }
      },
      "additionalProperties": false
    },
    "dark": {
      "type": "object",
      "description": "Overrides for the dark scheme: colours and gradients only",
      "properties": {
        "primary": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
        },
        "secondary": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
        },
        "primaryTint": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
        },
        "secondaryTint": {
          "type": "string",
          "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
        },
        "page": {
          "type": "object",
          "properties": {
            "background": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "text": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "textMuted": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "link": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "icon": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "focusRing": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "scrim": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "divider": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            }
          },
          "additionalProperties": false
        },
        "card": {
          "type": "object",
          "properties": {
            "background": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "border": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            }
          },
          "additionalProperties": false
        },
        "field": {
          "type": "object",
          "properties": {
            "background": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "border": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            }
          },
          "additionalProperties": false
        },
        "menu": {
          "type": "object",
          "properties": {
            "background": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "border": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            }
          },
          "additionalProperties": false
        },
        "primaryButton": {
          "type": "object",
          "properties": {
            "background": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "text": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "hover": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "pressed": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "border": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            }
          },
          "additionalProperties": false
        },
        "secondaryButton": {
          "type": "object",
          "properties": {
            "background": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "text": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "hover": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "pressed": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "border": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            }
          },
          "additionalProperties": false
        },
        "button": {
          "type": "object",
          "properties": {
            "textButton": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "disabled": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            }
          },
          "additionalProperties": false
        },
        "navbar": {
          "type": "object",
          "properties": {
            "background": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "backgroundImage": {
              "type": "string",
              "pattern": "^(?:none|(?:linear|radial)-gradient\\(.*\\))$",
              "description": "`none`, or `linear-gradient()` / `radial-gradient()` whose stops are hex, rgb() or hsl() colours with an optional percentage"
            },
            "text": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "icon": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "border": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            }
          },
          "additionalProperties": false
        },
        "footer": {
          "type": "object",
          "properties": {
            "background": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "backgroundImage": {
              "type": "string",
              "pattern": "^(?:none|(?:linear|radial)-gradient\\(.*\\))$",
              "description": "`none`, or `linear-gradient()` / `radial-gradient()` whose stops are hex, rgb() or hsl() colours with an optional percentage"
            },
            "text": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "link": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "border": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            }
          },
          "additionalProperties": false
        },
        "status": {
          "type": "object",
          "properties": {
            "error": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "errorBackground": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "success": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "successBackground": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "warning": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "warningBackground": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "info": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "infoBackground": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            }
          },
          "additionalProperties": false
        },
        "neutral": {
          "type": "object",
          "properties": {
            "50": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "100": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "200": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "300": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "400": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "500": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "600": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "700": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "800": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            },
            "900": {
              "type": "string",
              "pattern": "^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:[rR][gG][bB][aA]?|[hH][sS][lL][aA]?)\\(\\s*[0-9.][0-9.,%\\s/]*\\)|transparent|currentcolor|currentColor)$"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
