[
  {
    "type": "header",
    "content": "Placement and content"
  },
  {
    "type": "checkbox",
    "id": "show_events_widget",
    "label": "Show events widget",
    "default": true
  },
  {
    "type": "select",
    "id": "view_mode",
    "label": "View mode",
    "options": [
      {
        "value": "grid",
        "label": "Grid"
      },
      {
        "value": "list",
        "label": "List"
      },
      {
        "value": "calendar",
        "label": "Calendar"
      }
    ],
    "default": "list"
  },
  {
    "type": "range",
    "id": "events_per_page",
    "label": "Events per page",
    "min": 1,
    "max": 50,
    "step": 1,
    "default": 10,
    "info": "Number of events on each page."
  },
  {
    "type": "select",
    "id": "drawer_side",
    "label": "Drawer side",
    "options": [
      {
        "value": "right",
        "label": "Right"
      },
      {
        "value": "left",
        "label": "Left"
      }
    ],
    "default": "right"
  },
  {
    "type": "select",
    "id": "drawer_width",
    "label": "Drawer width",
    "default": "640px",
    "options": [
      {
        "value": "480px",
        "label": "480px"
      },
      {
        "value": "640px",
        "label": "640px"
      },
      {
        "value": "800px",
        "label": "800px"
      }
    ]
  },
  {
    "type": "checkbox",
    "id": "open_event_page",
    "label": "Open the event page instead of the drawer",
    "default": false,
    "info": "Clicking an event goes to its WordPress page. The details drawer is not used."
  },
  {
    "type": "checkbox",
    "id": "redirect_to_event_page",
    "label": "Open the event page when booking",
    "default": false
  },
  {
    "type": "checkbox",
    "id": "show_timezone_selector",
    "label": "Timezone selector",
    "default": true
  },
  {
    "type": "select",
    "id": "calendar_position",
    "label": "Calendar panel",
    "options": [
      {
        "value": "left",
        "label": "Left of the list"
      },
      {
        "value": "right",
        "label": "Right of the list"
      },
      {
        "value": "hidden",
        "label": "Hidden"
      }
    ],
    "default": "left"
  },
  {
    "type": "select",
    "id": "filters_position",
    "label": "Filters",
    "info": "The side panel keeps the filters in one vertical rail with the calendar.",
    "options": [
      {
        "value": "content",
        "label": "Above the list"
      },
      {
        "value": "aside",
        "label": "In the side panel"
      }
    ],
    "default": "aside"
  },
  {
    "type": "checkbox",
    "id": "show_search",
    "label": "Search field",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "show_view_mode_switch",
    "label": "View mode switch",
    "info": "Also has to be enabled in the Servv app.",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "show_language_selector",
    "label": "Language selector",
    "default": true,
    "info": "Shown when the shop has more than one translated language, unless it is turned off in the Servv app settings."
  },
  {
    "type": "checkbox",
    "id": "show_quick_date_filters",
    "label": "Quick date filters",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "show_mobile_date_strip",
    "label": "Mobile date strip",
    "info": "A scrollable row of dates that have events, shown above the list on narrow screens.",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "show_summary_cards",
    "label": "Availability summary cards",
    "default": false
  },
  {
    "type": "checkbox",
    "id": "show_share_button",
    "label": "Share button",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "show_separator_badges",
    "label": "Day separators",
    "info": "Only in list view, and only when separator badges are on in the Servv app.",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "show_pagination",
    "label": "Pagination",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "show_page_size_selector",
    "label": "Events per page selector",
    "default": true
  },
  {
    "type": "header",
    "content": "Filters"
  },
  {
    "type": "checkbox",
    "id": "filter_category",
    "label": "Category filter",
    "default": true,
    "info": "A filter shows up only when it is also enabled in the Servv app."
  },
  {
    "type": "checkbox",
    "id": "filter_team",
    "label": "Team filter",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "filter_member",
    "label": "Host filter",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "filter_location",
    "label": "Location filter",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "filter_language",
    "label": "Language filter",
    "default": true
  },
  {
    "type": "text",
    "id": "default_filter_team",
    "label": "Default team",
    "default": ""
  },
  {
    "type": "text",
    "id": "default_filter_member",
    "label": "Default host",
    "default": ""
  },
  {
    "type": "text",
    "id": "default_filter_category",
    "label": "Default category",
    "info": "Enter the name exactly as it appears in the Servv app. Which filters are shown is set there too."
  },
  {
    "type": "text",
    "id": "default_filter_location",
    "label": "Default location"
  },
  {
    "type": "text",
    "id": "default_filter_language",
    "label": "Default language"
  },
  {
    "type": "checkbox",
    "id": "default_filter_hide_others",
    "label": "Hide other choices for defaulted filters",
    "default": false
  },
  {
    "type": "header",
    "content": "Event card"
  },
  {
    "type": "checkbox",
    "id": "show_event_images",
    "label": "Event images",
    "default": true
  },
  {
    "type": "select",
    "id": "image_aspect_ratio",
    "label": "Image ratio",
    "options": [
      {
        "value": "16 / 9",
        "label": "16:9"
      },
      {
        "value": "4 / 3",
        "label": "4:3"
      },
      {
        "value": "1 / 1",
        "label": "Square"
      }
    ],
    "default": "16 / 9"
  },
  {
    "type": "checkbox",
    "id": "show_seats_remaining",
    "label": "Seats remaining",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "show_price",
    "label": "Price",
    "default": true
  },
  {
    "type": "checkbox",
    "id": "show_badges",
    "label": "Badges",
    "default": true
  },
  {
    "type": "range",
    "id": "card_description_words",
    "label": "Description word limit",
    "info": "0 keeps the limit set in the Servv app.",
    "min": 0,
    "max": 120,
    "step": 5,
    "default": 0
  },
  {
    "type": "range",
    "id": "grid_columns_desktop",
    "label": "Grid columns on desktop",
    "min": 1,
    "max": 4,
    "step": 1,
    "default": 3
  },
  {
    "type": "select",
    "id": "card_shadow",
    "label": "Card shadow",
    "options": [
      {
        "value": "none",
        "label": "None"
      },
      {
        "value": "0 1px 2px rgba(23, 17, 45, .06)",
        "label": "Small"
      },
      {
        "value": "0 6px 18px -8px rgba(23, 17, 45, .2)",
        "label": "Medium"
      },
      {
        "value": "0 20px 60px rgba(23, 17, 45, .14)",
        "label": "Large"
      }
    ],
    "default": "0 1px 2px rgba(23, 17, 45, .06)"
  },
  {
    "type": "header",
    "content": "Appearance"
  },
  {
    "type": "select",
    "id": "widget_skin",
    "label": "Widget style",
    "info": "Every style other than Default ships its own palette and shapes, and Neumorph, Polaris, Poster and Swiss set their own fonts too. Adaptive follows the theme's colours, corner radius and fonts. To recolour any style, turn Use theme colours off. A style with a colour scheme after the dash keeps that style's shapes and uses the scheme's own palette. Corner radius and card shadow always stay with the style.",
    "options": [
      {
        "value": "default",
        "label": "Default"
      },
      {
        "value": "default-citrus",
        "label": "Default \u2014 Citrus"
      },
      {
        "value": "default-oxblood",
        "label": "Default \u2014 Oxblood"
      },
      {
        "value": "default-neon",
        "label": "Default \u2014 Neon (dark)"
      },
      {
        "value": "adaptive",
        "label": "Adaptive (theme)"
      },
      {
        "value": "glass",
        "label": "Glass"
      },
      {
        "value": "glass-tropic",
        "label": "Glass \u2014 Tropic"
      },
      {
        "value": "glass-obsidian",
        "label": "Glass \u2014 Obsidian (dark)"
      },
      {
        "value": "neumorph",
        "label": "Neumorph"
      },
      {
        "value": "neumorph-terracotta",
        "label": "Neumorph \u2014 Terracotta"
      },
      {
        "value": "neumorph-inkwell",
        "label": "Neumorph \u2014 Inkwell (dark)"
      },
      {
        "value": "plastic",
        "label": "Plastic"
      },
      {
        "value": "polaris",
        "label": "Polaris"
      },
      {
        "value": "polaris-electric",
        "label": "Polaris \u2014 Electric"
      },
      {
        "value": "polaris-admin-dark",
        "label": "Polaris \u2014 Admin dark (dark)"
      },
      {
        "value": "poster",
        "label": "Poster"
      },
      {
        "value": "poster-hazard",
        "label": "Poster \u2014 Hazard"
      },
      {
        "value": "poster-blackout",
        "label": "Poster \u2014 Blackout (dark)"
      },
      {
        "value": "swiss",
        "label": "Swiss"
      },
      {
        "value": "swiss-concrete",
        "label": "Swiss \u2014 Concrete"
      },
      {
        "value": "swiss-nightgrid",
        "label": "Swiss \u2014 Night grid (dark)"
      }
    ],
    "default": "default"
  },
  {
    "type": "checkbox",
    "id": "skin_custom_styles",
    "label": "Style the chosen widget style myself",
    "default": false,
    "info": "Off keeps the palette and fonts each style ships. On hands Plastic, Polaris, Poster and Swiss the colour, font, base size and background settings below. Default always uses them; Glass always keeps its own look."
  },
  {
    "type": "color",
    "id": "glass_blob_color_1",
    "label": "Glass: first glow",
    "default": "#6224e7"
  },
  {
    "type": "color",
    "id": "glass_blob_color_2",
    "label": "Glass: second glow",
    "default": "#38aaff"
  },
  {
    "type": "color",
    "id": "glass_blob_color_3",
    "label": "Glass: third glow",
    "default": "#ff8cbe"
  },
  {
    "type": "range",
    "id": "glass_blob_opacity",
    "label": "Glass: glow intensity",
    "info": "Set to 0 for a flat tinted background. A background image replaces the glows entirely.",
    "min": 0,
    "max": 40,
    "step": 1,
    "unit": "%",
    "default": 22
  },
  {
    "type": "checkbox",
    "id": "use_theme_styles",
    "label": "Use theme colours",
    "default": true,
    "info": "When on, the widget inherits the theme palette and the colours below are ignored. The Font settings apply either way."
  },
  {
    "type": "color",
    "id": "color_text",
    "label": "Text",
    "default": "#17112d"
  },
  {
    "type": "color",
    "id": "color_text_muted",
    "label": "Secondary text",
    "default": "#6b6878"
  },
  {
    "type": "color",
    "id": "color_background",
    "label": "Widget background",
    "default": "#ffffff"
  },
  {
    "type": "color",
    "id": "color_surface",
    "label": "Panel background",
    "default": "#f7f6fb"
  },
  {
    "type": "color",
    "id": "color_border",
    "label": "Borders",
    "default": "#ddd9e9"
  },
  {
    "type": "color",
    "id": "color_primary",
    "label": "Primary button",
    "default": "#6224e7"
  },
  {
    "type": "color",
    "id": "color_primary_hover",
    "label": "Primary button hover",
    "default": "#4a18b4"
  },
  {
    "type": "color",
    "id": "color_primary_text",
    "label": "Primary button text",
    "default": "#ffffff"
  },
  {
    "type": "color",
    "id": "color_accent",
    "label": "Accent",
    "default": "#ff8f5c"
  },
  {
    "type": "color",
    "id": "card_background",
    "label": "Card background",
    "default": "#ffffff"
  },
  {
    "type": "color",
    "id": "card_text",
    "label": "Card text",
    "default": "#17112d",
    "info": "Kept separate from widget text so a dark background image does not hide the text inside cards."
  },
  {
    "type": "range",
    "id": "card_border_radius",
    "label": "Corner radius",
    "min": 0,
    "max": 24,
    "step": 1,
    "default": 8,
    "unit": "px"
  },
  {
    "type": "range",
    "id": "container_max_width",
    "label": "Maximum width",
    "min": 960,
    "max": 1600,
    "step": 40,
    "default": 1440,
    "unit": "px"
  },
  {
    "type": "range",
    "id": "container_padding",
    "label": "Outer padding",
    "min": 0,
    "max": 48,
    "step": 4,
    "default": 24,
    "unit": "px"
  },
  {
    "type": "text",
    "id": "font_family",
    "label": "Font",
    "default": "system-ui, sans-serif"
  },
  {
    "type": "text",
    "id": "heading_font",
    "label": "Heading font",
    "info": "Headings do not follow the font above \u2014 set them here.",
    "default": "system-ui, sans-serif"
  },
  {
    "type": "range",
    "id": "font_size_base",
    "label": "Base font size",
    "min": 12,
    "max": 20,
    "step": 1,
    "default": 16,
    "unit": "px"
  },
  {
    "type": "color",
    "id": "color_success",
    "label": "Success",
    "default": "#147a52",
    "info": "Available seats, confirmed registration. Used in both styling modes; lighter tints are derived."
  },
  {
    "type": "color",
    "id": "color_warning",
    "label": "Warning",
    "default": "#9a6500",
    "info": "Few seats left, closing soon."
  },
  {
    "type": "color",
    "id": "color_critical",
    "label": "Critical",
    "default": "#b42318",
    "info": "Sold out, cancelled, errors."
  },
  {
    "type": "color",
    "id": "color_info",
    "label": "Info",
    "default": "#1d5fd0",
    "info": "Waitlist, recurring events, recordings."
  },
  {
    "type": "header",
    "content": "Background"
  },
  {
    "type": "url",
    "id": "background_image",
    "label": "Background image",
    "info": "The focal point set on the image is used to position it.",
    "default": ""
  },
  {
    "type": "select",
    "id": "background_image_display",
    "label": "Image display",
    "options": [
      {
        "value": "cover",
        "label": "Fill the widget"
      },
      {
        "value": "contain",
        "label": "Fit inside the widget"
      },
      {
        "value": "tile",
        "label": "Tile"
      }
    ],
    "default": "cover"
  },
  {
    "type": "select",
    "id": "background_overlay_style",
    "label": "Gradient overlay",
    "options": [
      {
        "value": "none",
        "label": "None"
      },
      {
        "value": "linear",
        "label": "Linear"
      },
      {
        "value": "radial",
        "label": "Radial"
      }
    ],
    "default": "none",
    "info": "Sits above the image and below the events. Use it to keep text readable."
  },
  {
    "type": "color",
    "id": "background_overlay_from",
    "label": "Gradient start",
    "default": "#17112d99"
  },
  {
    "type": "color",
    "id": "background_overlay_to",
    "label": "Gradient end",
    "default": "#17112d00"
  },
  {
    "type": "range",
    "id": "background_overlay_angle",
    "label": "Gradient angle",
    "min": 0,
    "max": 360,
    "step": 15,
    "default": 180,
    "info": "0 points up, 90 points right. Ignored by the radial overlay.",
    "unit": "deg"
  },
  {
    "type": "range",
    "id": "background_overlay_opacity",
    "label": "Overlay opacity",
    "min": 0,
    "max": 100,
    "step": 5,
    "default": 100,
    "unit": "%"
  },
  {
    "type": "header",
    "content": "Calendar and drawer"
  },
  {
    "type": "color",
    "id": "calendar_date_text",
    "label": "Date text",
    "default": "#17112d"
  },
  {
    "type": "color",
    "id": "calendar_marked_background",
    "label": "Dates with events",
    "default": "#efe9ff"
  },
  {
    "type": "color",
    "id": "calendar_selected_background",
    "label": "Selected date background",
    "default": "#6224e7"
  },
  {
    "type": "color",
    "id": "calendar_selected_text",
    "label": "Selected date text",
    "default": "#ffffff"
  },
  {
    "type": "color",
    "id": "calendar_today_border",
    "label": "Today border",
    "default": "#c7c1d8"
  },
  {
    "type": "color",
    "id": "drawer_background",
    "label": "Drawer background",
    "default": "#ffffff"
  },
  {
    "type": "range",
    "id": "drawer_backdrop_opacity",
    "label": "Drawer backdrop opacity",
    "min": 0,
    "max": 100,
    "step": 5,
    "default": 45,
    "unit": "%"
  }
]
