> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fetchski-attract.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a blog post

> Create a new blog post.

**Access:** an API key with `content:blog:write` (or a master above it: `content:blog:all`, `content:all`, `admin:all`). In published mode (the default) it goes live too, so the key also needs `content:blog:publish` (or a master above it); send `aposMode=draft` to change only the draft. A signed-in person may call it as far as their own permissions allow; anyone else gets 403.

**Rate limit:** the key’s own writes-per-minute limit, set when the key is created (default 120); over it, 429 with `Retry-After`.



## OpenAPI

````yaml /api-reference/openapi.yaml post /@apostrophecms/blog
openapi: 3.1.0
info:
  title: Fetchski Attract CMS API
  description: >-
    Auto-generated OpenAPI spec for this Fetchski site instance. Authenticate
    machine-to-machine requests with an API key by sending the header
    `Authorization: ApiKey <token>`. Keys are issued in the CMS (API Keys) and
    carry scopes that limit them to specific actions. Each key also has its own
    security policy, chosen when it is created: a signing mode (token only,
    signed writes, or every request signed with the key’s signing secret via
    `X-Fetchski-Timestamp` + `X-Fetchski-Signature`), an optional network
    allowlist, and reads/writes-per-minute limits (429 with `Retry-After` over
    them). Some routes require a signature from every key — see each route.
  version: 1.0.0
servers:
  - url: https://{host}/api/v1
    description: 'Your site: set `host` to its host name.'
    variables:
      host:
        default: acme.example
security: []
tags:
  - name: Authentication
    description: >-
      Sign in as a person to get a bearer token or a session cookie.
      Integrations use an API key instead: send `Authorization: ApiKey <token>`.
  - name: SDK Packages
    description: >-
      The site’s own npm registry and Composer repository for the Attract SDKs,
      so an app installs them with one of the site’s API keys. Point npm, pnpm,
      Bun or Composer at them; the SDKs never call them.
  - name: Pages
    description: 'The page tree: each page’s content, place and URL.'
  - name: Global Content
    description: Site-wide content and settings every page shares.
  - name: Redirects
    description: Old URLs and where they now send visitors.
  - name: Internationalization
    description: The site’s locales.
  - name: Languages
    description: >-
      The site’s languages: the main language’s name and every further
      language’s name, code and Public switch. A save applies at once: a new
      language gets its home page and its own addresses (/fr/…), and its pages
      are then translated with each type’s localize routes.
  - name: Page Templates
    description: >-
      The site’s whole-page starting arrangements. They are not pages of the
      site (the Pages list leaves them out for API keys): read one, then make a
      page from it with Pages → create and `_copyingId` (`copyingId` in the
      SDKs).
  - name: Blog Posts
    description: The blog’s posts, and importing them from Markdown or MDX.
  - name: Blog Categories
    description: The categories posts are filed under.
  - name: Authors
    description: The people posts are credited to.
  - name: Team Members
    description: The people the Team section shows.
  - name: Testimonials
    description: Quotes from customers.
  - name: FAQ Items
    description: Questions and their answers.
  - name: FAQ Categories
    description: The groups questions are sorted into.
  - name: Google Reviews
    description: Reviews from the business’s Google profile, synced on a schedule.
  - name: Instagram Posts
    description: Posts from the connected Instagram account, synced on a schedule.
  - name: Service Areas
    description: The places the business serves, for the service map.
  - name: Cookies
    description: The cookies the consent banner declares.
  - name: Media
    description: The Images and Files libraries, and their tags.
  - name: Videos
    description: The Videos library.
  - name: Image Folders
    description: The folders that organize the Images library.
  - name: File Folders
    description: The folders that organize the Files library.
  - name: Video Folders
    description: The folders that organize the Videos library.
  - name: Photo Albums
    description: Hand-picked, ordered sets of photos for galleries.
  - name: Photo Feeds
    description: >-
      Feeds that collect photos from a connected photo source into the Images
      library on a schedule.
  - name: Attachments
    description: Uploading files and cropping images.
  - name: Fetchski Media
    description: >-
      Read-only discovery over the Images and Videos libraries: find what to
      reference in an MDX blog import, or which file to use, with its URLs.
  - name: Forms
    description: The site’s forms and their fields.
  - name: Form Submissions
    description: >-
      What visitors sent through the site’s forms. Submissions hold personal
      details: give a key `forms:read` only where it is needed.
  - name: Conversion Events
    description: >-
      The conversion event log — one record per conversion, with its attribution
      and consent snapshot and its delivery to each ad platform. Read it
      incrementally, post facts from other systems (a reservation purchase, a
      lead outcome), and adjust them (refunds, cancellations). One event ID
      travels everywhere as the platforms’ de-duplication key.
  - name: Visitor Attribution
    description: >-
      Per-visitor attribution on this site: first touch, last ad or campaign
      touch, and the ad platforms’ browser IDs. The join other systems use to
      attach a purchase to the marketing-site journey that led to it.
  - name: Ads Metrics
    description: >-
      Aggregates for dashboards: ad-click landings and conversions, by day,
      platform, campaign and more.
  - name: Conversions
    description: >-
      Conversion definitions — the visitor actions (a lead, a call click, a
      booking, a purchase) this site reports to the ad platforms, each with a
      row per platform. Managed by administrators in the CMS.
  - name: Webhooks
    description: >-
      Push notifications of form submissions and conversion-event changes to the
      site’s Webhook Destinations — signed with each destination’s own secret,
      retried for a day, at-least-once. Set destinations up in the CMS (Webhook
      Destinations, for people granted “Manage webhook destinations”): URL,
      events, optional filters and custom headers, and the signing secret shown
      once.
  - name: Request Log
    description: >-
      The page views the site captured (Connections → Tracking → Request log),
      and the query parameters on them: campaign tags and ad click IDs.
paths:
  /@apostrophecms/blog:
    post:
      tags:
        - Blog Posts
      summary: Create a blog post
      description: >-
        Create a new blog post.


        **Access:** an API key with `content:blog:write` (or a master above it:
        `content:blog:all`, `content:all`, `admin:all`). In published mode (the
        default) it goes live too, so the key also needs `content:blog:publish`
        (or a master above it); send `aposMode=draft` to change only the draft.
        A signed-in person may call it as far as their own permissions allow;
        anyone else gets 403.


        **Rate limit:** the key’s own writes-per-minute limit, set when the key
        is created (default 120); over it, 429 with `Retry-After`.
      operationId: createBlog
      parameters:
        - $ref: '#/components/parameters/AposMode'
        - $ref: '#/components/parameters/AposLocale'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Blog'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Blog'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Blog'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - ApiKeyAuth:
            - content:blog:write
        - BearerAuth: []
      x-codeSamples:
        - lang: typescript
          label: TypeScript
          source: >-
            import { createSiteClient } from '@fetchski/attract-cms-sdk';


            const site = createSiteClient();

            const blog = await site.blogPosts().createBlog({ title: 'Example
            title', publishedAt: '2026-10-21' });
        - lang: php
          label: Laravel
          source: >-
            use Fetchski\AttractCmsLaravel\Facades\Attract;


            $blog = Attract::blogPosts()->createBlog(title: 'Example title',
            publishedAt: '2026-10-21');
components:
  parameters:
    AposMode:
      name: aposMode
      in: query
      description: >-
        `published` (the default) or `draft`. Drafts need a credential that may
        see them: an API key with the type’s write scope
        (`content:<type>:write`), or a signed-in editor. The public and a key
        with only the read scope get 403.
      required: false
      schema:
        type: string
        enum:
          - draft
          - published
        default: published
      example: published
    AposLocale:
      name: aposLocale
      in: query
      description: >-
        The locale to read or write, e.g. `en` (default: the site’s default
        locale).
      required: false
      schema:
        type: string
        example: fr
  schemas:
    Blog:
      type: object
      properties:
        title:
          type: string
          title: Title
          default: ''
          description: >-
            Its title: the name it goes by in every list, and the heading of its
            page where it has one.
        _author:
          type:
            - array
            - 'null'
          items:
            type: object
            additionalProperties: true
          title: Author
          description: >-
            Credited author. Pick from the Authors collection — their profile
            photo shows alongside the post. The related `author` documents, in
            order (empty when none). To set it, send a list of `{ "_id": "…" }`,
            one per document (one at most); a document the site can’t find is
            left out.
          maxItems: 1
        _category:
          type:
            - array
            - 'null'
          items:
            type: object
            additionalProperties: true
          title: Category
          description: >-
            The post’s category. Manage the list (and each badge color) under
            Blog Categories. The related `blog-category` documents, in order
            (empty when none). To set it, send a list of `{ "_id": "…" }`, one
            per document (one at most); a document the site can’t find is left
            out.
          maxItems: 1
        publishedAt:
          type: string
          format: date
          title: Publication Date
          description: >-
            The post’s publication date (`YYYY-MM-DD`, e.g. `2026-10-21`): the
            date it shows, and its place in the blog list, newest first.
        slug:
          type:
            - string
            - 'null'
          description: >-
            The URL name: lowercase words joined by hyphens (letters outside
            a–z, even emoji, are kept).
          title: Slug
          default: ''
          x-fetchski-write-optional: Left out, it’s made from the title.
        visibility:
          type:
            - string
            - 'null'
          title: Visibility
          description: Select whether this content is public or private
          default: public
          enum:
            - public
            - loginRequired
            - null
        scheduledPublish:
          type:
            - string
            - 'null'
          description: An ISO 8601 date and time, e.g. `2026-10-21T14:30:00.000Z`.
        scheduledUnpublish:
          type:
            - string
            - 'null'
          description: An ISO 8601 date and time, e.g. `2026-10-21T14:30:00.000Z`.
        excerpt:
          type:
            - string
            - 'null'
          title: Excerpt
          description: Short teaser shown on the blog index and homepage. 1–2 sentences.
          default: ''
        featuredImage:
          title: Featured image
          description: >-
            Widgets, top to bottom: send `{ "items": [ … ] }`, one object per
            widget with its `type`. Writing it replaces the whole area.
          allOf:
            - $ref: '#/components/schemas/ImageArea'
        main:
          title: Body
          description: >-
            Widgets, top to bottom: send `{ "items": [ … ] }`, one object per
            widget with its `type`. Writing it replaces the whole area. A new
            document starts with `@apostrophecms/rich-text`.
          allOf:
            - $ref: '#/components/schemas/BlogMainArea'
        afterContent:
          title: After content
          description: >-
            Widgets, top to bottom: send `{ "items": [ … ] }`, one object per
            widget with its `type`. Writing it replaces the whole area.
          allOf:
            - $ref: '#/components/schemas/AfterContentArea'
        postFontOverrides:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/BlogPostFontOverridesItem'
          title: Typeface for this post
          description: >-
            Optional. Leave empty to follow the blog’s Reading settings (and,
            through them, the site fonts). Adding a row here replaces the
            blog-wide choice for this post only.
          default: []
          maxItems: 4
        seoTitle:
          type:
            - string
            - 'null'
          title: SEO title
          description: >-
            Overrides the document title in the browser tab and search results.
            Leave blank to use the regular title.
          default: ''
        seoDescription:
          type:
            - string
            - 'null'
          title: SEO description
          description: >-
            Shown in search results and link previews. Aim for 150–160
            characters.
          default: ''
        seoImage:
          title: Social share image
          description: >-
            Used for Open Graph / social link previews. Recommended 1200×630.
            Widgets, top to bottom: send `{ "items": [ … ] }`, one object per
            widget with its `type`. Writing it replaces the whole area.
          allOf:
            - $ref: '#/components/schemas/ImageArea'
        archived:
          type:
            - boolean
            - 'null'
          title: Archived
          default: false
          description: >-
            In the archive: kept, but out of every list and off the site until
            it is restored. `false` (or null) for a live document.
        _id:
          type: string
          title: Document ID
          readOnly: true
          description: >-
            The document’s id. On a type with drafts it ends in its locale and
            mode (`…:en:published`, `…:en:draft`): the part before the first
            colon is its `aposDocId`, shared by both copies. The `{_id}` the
            type’s routes take.
        type:
          type: string
          title: Document Type
          readOnly: true
          description: 'The document type’s name: always this type’s.'
        createdAt:
          type:
            - string
            - 'null'
          format: date-time
          title: Created At
          readOnly: true
          description: When it was created (ISO 8601).
        updatedAt:
          type:
            - string
            - 'null'
          format: date-time
          title: Updated At
          readOnly: true
          description: When it last changed (ISO 8601).
        _url:
          type:
            - string
            - 'null'
          format: uri
          description: The document’s page on the site.
        _parentUrl:
          type:
            - string
            - 'null'
          format: uri
          description: The page that lists it (the blog page).
        _parentSlug:
          type:
            - string
            - 'null'
          description: That page’s slug.
        _parent:
          type: object
          additionalProperties: true
          description: >-
            That page, briefly (`_id`, `title`, `slug`, `type`, `path`,
            `level`).
        aposShareKey:
          type:
            - string
            - 'null'
          description: >-
            The draft’s preview share key, while its share link is on: the link
            is the draft’s `_url` with `aposShareKey` and `aposShareId` (the
            draft’s `_id`) in its query. Absent otherwise, and on published
            documents.
          example: k3v9x2m7q1z8w4p6
          readOnly: true
      required:
        - title
        - publishedAt
        - _id
        - type
      description: Blog content type
    ImageArea:
      type: object
      description: >-
        Content made of widgets, as the site stores it: send `{ "items": [ … ]
        }`, one object per widget, top to bottom. It takes
        `@apostrophecms/image` widgets; an item of any other type is dropped. At
        most 1. Writing it replaces the whole area.
      properties:
        metaType:
          type: string
          enum:
            - area
          description: Always `area`.
        _id:
          type: string
          description: 'The area’s id, set by the site: leave it out when you write one.'
        items:
          type: array
          description: >-
            The widgets, top to bottom. Each is an object with its `type` and
            that widget’s own fields; `_id` and `metaType` may be left out (the
            site sets them).
          items:
            $ref: '#/components/schemas/ImageWidget'
          maxItems: 1
      additionalProperties: true
      example:
        items: []
    BlogMainArea:
      type: object
      description: >-
        Content made of widgets, as the site stores it: send `{ "items": [ … ]
        }`, one object per widget, top to bottom. It takes
        `@apostrophecms/rich-text`, `@apostrophecms/image`,
        `@apostrophecms/video`, `@apostrophecms/layout`, `intro`, `feature`,
        `stats`, `steps`, `pricing`, `media-text`, `device-mock`, `faq` widgets;
        an item of any other type is dropped. Writing it replaces the whole
        area.
      properties:
        metaType:
          type: string
          enum:
            - area
          description: Always `area`.
        _id:
          type: string
          description: 'The area’s id, set by the site: leave it out when you write one.'
        items:
          type: array
          description: >-
            The widgets, top to bottom. Each is an object with its `type` and
            that widget’s own fields; `_id` and `metaType` may be left out (the
            site sets them).
          items:
            $ref: '#/components/schemas/BlogMainAreaItem'
      additionalProperties: true
      example:
        items:
          - type: '@apostrophecms/rich-text'
            content: <p>Hello from the API.</p>
    AfterContentArea:
      type: object
      description: >-
        Content made of widgets, as the site stores it: send `{ "items": [ … ]
        }`, one object per widget, top to bottom. It takes
        `@apostrophecms/layout`, `intro`, `feature`, `stats`, `logos`, `steps`,
        `media-text`, `device-mock`, `team`, `faq`, `service-map`,
        `blog-preview`, `cookie-declaration`, `@apostrophecms/rich-text`,
        `pricing`, `newsletter`, `sms-signup`, `form-render`, `final-cta`
        widgets; an item of any other type is dropped. Writing it replaces the
        whole area.
      properties:
        metaType:
          type: string
          enum:
            - area
          description: Always `area`.
        _id:
          type: string
          description: 'The area’s id, set by the site: leave it out when you write one.'
        items:
          type: array
          description: >-
            The widgets, top to bottom. Each is an object with its `type` and
            that widget’s own fields; `_id` and `metaType` may be left out (the
            site sets them).
          items:
            $ref: '#/components/schemas/AfterContentAreaItem'
      additionalProperties: true
      example:
        items:
          - type: '@apostrophecms/rich-text'
            content: <p>Hello from the API.</p>
    BlogPostFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: '#/components/schemas/BlogPostFontOverridesItemUploadsItem'
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    ApiError:
      type: object
      description: >-
        An error answer: the error’s name, a message saying what is wrong, and
        details by error.
      required:
        - name
      properties:
        name:
          type: string
          description: >-
            The error’s name: `invalid`, `required`, `unauthorized`,
            `forbidden`, `notfound`, `conflict`, `locked`, `tooManyRequests`,
            `error` (a server failure)…
        message:
          type: string
          description: What is wrong, and how to fix it.
        data:
          type: object
          additionalProperties: true
          description: >-
            Details, by error: `errors` (one entry per field problem, each with
            its `path`), `retryAfter` (seconds, on 429), `permission`…
    ImageWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - '@apostrophecms/image'
          description: 'The widget’s type: always `@apostrophecms/image`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        _image:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Image
          maxItems: 1
          description: >-
            The related `@apostrophecms/image` documents, in order (empty when
            none). To set it, send a list of `{ "_id": "…" }`, one per document
            (one at most); a document the site can’t find is left out.
        caption:
          type: string
          title: Caption
          default: ''
          description: Caption.
        linkTo:
          type:
            - string
            - 'null'
          title: Link To...
          default: none
          enum:
            - none
            - '@apostrophecms/any-page-type'
            - _url
            - null
          description: Link To...
        _apostrophecms-any-page-type:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Page
          maxItems: 1
          description: >-
            The related `@apostrophecms/any-page-type` documents, in order
            (empty when none). To set it, send a list of `{ "_id": "…" }`, one
            per document (one at most); a document the site can’t find is left
            out.
        linkHref:
          type:
            - string
            - 'null'
          title: URL
          description: apostrophe:linkHrefHelp When set, a URL; empty or null when not.
        linkHrefTitle:
          type: string
          title: Link Title
          default: ''
          description: Link Title.
        linkTitle:
          type: string
          title: Link Title
          description: If empty, the title of the related document will be used.
          default: ''
        linkTarget:
          type:
            - array
            - 'null'
          items:
            type: string
            enum:
              - _blank
          title: Link Target
          description: Link Target.
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `@apostrophecms/image` widget: its `type` and its own fields. A field
        left out takes its default.
      additionalProperties: true
    BlogMainAreaItem:
      description: >-
        A widget in an area that takes `@apostrophecms/rich-text`,
        `@apostrophecms/image`, `@apostrophecms/video`, `@apostrophecms/layout`,
        `intro`, `feature`, `stats`, `steps`, `pricing`, `media-text`,
        `device-mock`, `faq`: the one its `type` names.
      oneOf:
        - $ref: '#/components/schemas/RichTextWidget'
        - $ref: '#/components/schemas/ImageWidget'
        - $ref: '#/components/schemas/VideoWidget'
        - $ref: '#/components/schemas/LayoutWidget'
        - $ref: '#/components/schemas/IntroWidget'
        - $ref: '#/components/schemas/FeatureWidget'
        - $ref: '#/components/schemas/StatsWidget'
        - $ref: '#/components/schemas/StepsWidget'
        - $ref: '#/components/schemas/PricingWidget'
        - $ref: '#/components/schemas/MediaTextWidget'
        - $ref: '#/components/schemas/DeviceMockWidget'
        - $ref: '#/components/schemas/FaqWidget'
      discriminator:
        propertyName: type
        mapping:
          '@apostrophecms/rich-text': '#/components/schemas/RichTextWidget'
          '@apostrophecms/image': '#/components/schemas/ImageWidget'
          '@apostrophecms/video': '#/components/schemas/VideoWidget'
          '@apostrophecms/layout': '#/components/schemas/LayoutWidget'
          intro: '#/components/schemas/IntroWidget'
          feature: '#/components/schemas/FeatureWidget'
          stats: '#/components/schemas/StatsWidget'
          steps: '#/components/schemas/StepsWidget'
          pricing: '#/components/schemas/PricingWidget'
          media-text: '#/components/schemas/MediaTextWidget'
          device-mock: '#/components/schemas/DeviceMockWidget'
          faq: '#/components/schemas/FaqWidget'
    AfterContentAreaItem:
      description: >-
        A widget in an area that takes `@apostrophecms/layout`, `intro`,
        `feature`, `stats`, `logos`, `steps`, `media-text`, `device-mock`,
        `team`, `faq`, `service-map`, `blog-preview`, `cookie-declaration`,
        `@apostrophecms/rich-text`, `pricing`, `newsletter`, `sms-signup`,
        `form-render`, `final-cta`: the one its `type` names.
      oneOf:
        - $ref: '#/components/schemas/LayoutWidget'
        - $ref: '#/components/schemas/IntroWidget'
        - $ref: '#/components/schemas/FeatureWidget'
        - $ref: '#/components/schemas/StatsWidget'
        - $ref: '#/components/schemas/LogosWidget'
        - $ref: '#/components/schemas/StepsWidget'
        - $ref: '#/components/schemas/MediaTextWidget'
        - $ref: '#/components/schemas/DeviceMockWidget'
        - $ref: '#/components/schemas/TeamWidget'
        - $ref: '#/components/schemas/FaqWidget'
        - $ref: '#/components/schemas/ServiceMapWidget'
        - $ref: '#/components/schemas/BlogPreviewWidget'
        - $ref: '#/components/schemas/CookieDeclarationWidget'
        - $ref: '#/components/schemas/RichTextWidget'
        - $ref: '#/components/schemas/PricingWidget'
        - $ref: '#/components/schemas/NewsletterWidget'
        - $ref: '#/components/schemas/SmsSignupWidget'
        - $ref: '#/components/schemas/FormRenderWidget'
        - $ref: '#/components/schemas/FinalCtaWidget'
      discriminator:
        propertyName: type
        mapping:
          '@apostrophecms/layout': '#/components/schemas/LayoutWidget'
          intro: '#/components/schemas/IntroWidget'
          feature: '#/components/schemas/FeatureWidget'
          stats: '#/components/schemas/StatsWidget'
          logos: '#/components/schemas/LogosWidget'
          steps: '#/components/schemas/StepsWidget'
          media-text: '#/components/schemas/MediaTextWidget'
          device-mock: '#/components/schemas/DeviceMockWidget'
          team: '#/components/schemas/TeamWidget'
          faq: '#/components/schemas/FaqWidget'
          service-map: '#/components/schemas/ServiceMapWidget'
          blog-preview: '#/components/schemas/BlogPreviewWidget'
          cookie-declaration: '#/components/schemas/CookieDeclarationWidget'
          '@apostrophecms/rich-text': '#/components/schemas/RichTextWidget'
          pricing: '#/components/schemas/PricingWidget'
          newsletter: '#/components/schemas/NewsletterWidget'
          sms-signup: '#/components/schemas/SmsSignupWidget'
          form-render: '#/components/schemas/FormRenderWidget'
          final-cta: '#/components/schemas/FinalCtaWidget'
    BlogPostFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    RichTextWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - '@apostrophecms/rich-text'
          description: 'The widget’s type: always `@apostrophecms/rich-text`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        content:
          type: string
          format: html
          description: >-
            The text as HTML, e.g. `<h2>Our story</h2><p>It began with
            <strong>one</strong> idea.</p>`. The site keeps the tags and styles
            this area’s editor offers (paragraphs, headings, bold, italic,
            links, lists…) and removes the rest.
          example: <p>Hello from the API.</p>
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `@apostrophecms/rich-text` widget: its `type` and its own fields. A
        field left out takes its default.
      additionalProperties: true
    VideoWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - '@apostrophecms/video'
          description: 'The widget’s type: always `@apostrophecms/video`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        video:
          type: object
          description: >-
            Enter the URL for a media source you wish to embed (e.g., YouTube,
            Vimeo, or other hosted video URL).
          title: Video URL
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
        - video
      description: >-
        A `@apostrophecms/video` widget: its `type` and its own fields. A field
        left out takes its default.
      additionalProperties: true
    LayoutWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - '@apostrophecms/layout'
          description: 'The widget’s type: always `@apostrophecms/layout`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        columns:
          title: Columns
          description: >-
            Widgets, top to bottom: send `{ "items": [ … ] }`, one object per
            widget with its `type`. Writing it replaces the whole area.
          allOf:
            - $ref: '#/components/schemas/LayoutColumnArea'
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `@apostrophecms/layout` widget: its `type` and its own fields. A field
        left out takes its default.
      additionalProperties: true
    IntroWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - intro
          description: 'The widget’s type: always `intro`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        introEyebrow:
          type: string
          title: Eyebrow
          description: Small label shown above the title.
          default: Why us
        introEyebrowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the eyebrow + its dash. Leave empty to use the
            secondary (mint) color.
          title: Eyebrow color (dark theme)
        introEyebrowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the mint default.
          title: Eyebrow color (light theme)
        introEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        introEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        introHeadline:
          type: string
          title: Headline
          default: What makes us different
          description: Headline.
        introHeadlineColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the headline color. Leave empty to track the
            theme’s text color.
          title: Headline color (dark theme)
        introHeadlineColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the theme default.
          title: Headline color (light theme)
        introHeadlineWeight:
          type:
            - string
            - 'null'
          title: Headline weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Headline weight.
        introBody:
          type: string
          title: Body copy
          default: >-
            Tell visitors what sets you apart: how you work, what you care about
            and what they can count on. Two or three sentences is plenty.
          description: Body copy.
        introBodyColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the body text color. Leave empty for the muted
            default.
          title: Body color (dark theme)
        introBodyColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the muted default.
          title: Body color (light theme)
        introBodyWeight:
          type:
            - string
            - 'null'
          title: Body weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - null
          description: Body weight.
        introPhotoPlacement:
          type:
            - string
            - 'null'
          title: Photo placement
          description: >-
            Where the optional photo sits. Left/right place it beside the text;
            Full background fills the whole section behind the text (with a
            readability overlay).
          default: right
          enum:
            - none
            - left
            - right
            - background
            - null
        introImage:
          title: Photo
          description: >-
            Widgets, top to bottom: send `{ "items": [ … ] }`, one object per
            widget with its `type`. Writing it replaces the whole area.
          allOf:
            - $ref: '#/components/schemas/ImageArea'
        introPhotoCorners:
          type:
            - string
            - 'null'
          title: Photo corners
          default: rounded
          enum:
            - rounded
            - squared
            - null
          description: Photo corners.
        introPhotoFrame:
          type:
            - string
            - 'null'
          title: Photo frame
          description: >-
            Border draws a frame around the photo; Offset adds a refined offset
            accent frame behind it.
          default: border
          enum:
            - none
            - border
            - offset
            - null
        introPhotoFrameColor:
          type:
            - string
            - 'null'
          description: >-
            Border / offset-frame color. Leave empty to use the site accent
            color.
          title: Frame color
        introPhotoTilt:
          type:
            - string
            - 'null'
          title: Photo tilt
          description: A slight rotation for a more playful look.
          default: none
          enum:
            - none
            - left
            - right
            - null
        introPhotoHover:
          type:
            - string
            - 'null'
          title: Photo hover effect
          default: lift
          enum:
            - none
            - lift
            - zoom
            - tilt
            - glow
            - lift-glow
            - zoom-glow
            - null
          description: Photo hover effect.
        introOverlayColor:
          type:
            - string
            - 'null'
          description: >-
            Scrim behind the text over a full-background photo. Leave empty to
            use the dark surface color.
          title: Overlay color (dark theme)
        introOverlayColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme overlay,
            then the light surface color.
          title: Overlay color (light theme)
        introOverlayOpacity:
          type:
            - number
            - 'null'
          title: Overlay opacity (%)
          default: 55
          minimum: 0
          maximum: 100
          x-fetchski-clamped: true
          description: Overlay opacity (%).
        introBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        introBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        introBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        introBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        introFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/IntroWidgetIntroFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `intro` widget: its `type` and its own fields. A field left out takes
        its default.
      additionalProperties: true
    FeatureWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - feature
          description: 'The widget’s type: always `feature`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        featureColumns:
          type:
            - string
            - 'null'
          title: Cards per row
          description: >-
            Auto fits as many as comfortably fit and works for any number of
            cards. Or lock a maximum per row.
          default: auto
          enum:
            - auto
            - '2'
            - '3'
            - '4'
            - null
        featureGap:
          type:
            - string
            - 'null'
          title: Gap between cards
          default: normal
          enum:
            - tight
            - normal
            - roomy
            - null
          description: Gap between cards.
        featureCardSize:
          type:
            - string
            - 'null'
          title: Card size
          description: Scales padding, icon, title, and the index numeral together.
          default: medium
          enum:
            - small
            - medium
            - large
            - null
        featureCardStyle:
          type:
            - string
            - 'null'
          title: Card style
          description: >-
            The card treatment. Poster (the default) frames the card with an
            accent keyline; Raised is a quiet lit card; Luxe a frosted glass
            panel; Spine adds a color rail; Tint an accent wash;
            Ticket/Bracket/Forge/Press/Inlay are the graphic showstoppers.
          default: poster
          enum:
            - raised
            - luxe
            - outline
            - plain
            - poster
            - edge
            - tint
            - ticket
            - bracket
            - forge
            - press
            - inlay
            - null
        featureCardStyleRadius:
          type:
            - string
            - 'null'
          title: Card corners
          description: >-
            Corner rounding for each card. Default keeps the widget’s own tuned
            corners — except Forge, which defaults to tight machined corners
            matching its engraved frame.
          default: default
          enum:
            - default
            - square
            - slight
            - rounded
            - large
            - null
        featureCardStyleAccentColor:
          type:
            - string
            - 'null'
          description: >-
            Colors the Spine rail, Bracket marks, Forge corner/frame and Press
            margin rule. Leave empty to use the brand accent.
          title: Card style color (dark theme)
        featureCardStyleAccentColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Card style color (light theme)
        featureCardStyleForgeScope:
          type:
            - string
            - 'null'
          title: Forge color placement
          description: >-
            Where the Forge plate wears its color: a single corner mark (the
            machinist’s datum, default) or the whole engraved frame.
          default: corner
          enum:
            - corner
            - frame
            - null
        featureCardStyleForgeWeight:
          type:
            - string
            - 'null'
          title: Forge line weight
          description: Thickness of the Forge corner mark / colored frame.
          default: fine
          enum:
            - fine
            - medium
            - bold
            - null
        featureCardHover:
          type:
            - string
            - 'null'
          title: Card hover effect
          description: >-
            How a card reacts on hover. Pop is the lift + hard offset shadow;
            Glow is a soft accent halo.
          default: pop
          enum:
            - none
            - lift
            - pop
            - glow
            - border
            - null
        featureCardHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Border / shadow / glow color on hover. Leave empty to use the site
            accent color.
          title: Hover accent color (dark theme)
        featureCardHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the accent.
          title: Hover accent color (light theme)
        featureNumbering:
          type: boolean
          title: Show index numbers
          description: >-
            A big outlined numeral on each card (01, 02, …). Great for
            step-by-step sequences; turn off when the cards aren’t ordered.
          default: true
        featureNumberFill:
          type:
            - string
            - 'null'
          title: Number fill
          description: >-
            Same treatment as the hero ghost text: all numbers solid, outlined
            and filling on hover, or always outlined.
          default: hover
          enum:
            - solid
            - hover
            - outline
            - null
        featureNumberColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Tints the numeral fill + outline. Leave empty to track the
            theme’s text color.
          title: Number color (dark theme)
        featureNumberColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the theme default.
          title: Number color (light theme)
        featureTitleColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the card title color. Leave empty to track the
            theme’s text color.
          title: Title color (dark theme)
        featureTitleColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the theme default.
          title: Title color (light theme)
        featureTitleWeight:
          type:
            - string
            - 'null'
          title: Title weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Title weight.
        featureTextColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the card text color. Leave empty for the muted
            default.
          title: Text color (dark theme)
        featureTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the muted default.
          title: Text color (light theme)
        featureTextWeight:
          type:
            - string
            - 'null'
          title: Text weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - null
          description: Text weight.
        featureCards:
          type: array
          items:
            $ref: '#/components/schemas/FeatureWidgetFeatureCardsItem'
          title: Feature cards
          default:
            - icon: star
              cardTitle: Quality you can see
              cardText: >-
                Describe the standard you hold yourself to, in a sentence or
                two.
            - icon: tag
              cardTitle: Clear, fair pricing
              cardText: >-
                Say how your pricing works, so visitors know what to expect
                before they ask.
            - icon: users
              cardTitle: People who care
              cardText: Introduce the people behind the work and what they bring to it.
            - icon: comments
              cardTitle: Easy to reach
              cardText: Tell visitors how and when they can get in touch with you.
          description: Feature cards.
        featureBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        featureBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        featureBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        featureBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        featureFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/FeatureWidgetFeatureFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `feature` widget: its `type` and its own fields. A field left out
        takes its default.
      additionalProperties: true
    StatsWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - stats
          description: 'The widget’s type: always `stats`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        statsEyebrowEnabled:
          type: boolean
          title: Show eyebrow
          description: A small label above the heading (e.g. "By the numbers").
          default: true
        statsEyebrow:
          type: string
          title: Eyebrow
          default: By the numbers
          description: Eyebrow.
        statsEyebrowColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the secondary (mint) color.
          title: Eyebrow color (dark theme)
        statsEyebrowColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Eyebrow color (light theme)
        statsEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        statsEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        statsHeading:
          type: string
          title: Heading
          description: Optional. Leave empty to show just the numbers.
          default: The numbers speak for themselves
        statsHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Heading color (dark theme)
        statsHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Heading color (light theme)
        statsHeadingWeight:
          type:
            - string
            - 'null'
          title: Heading weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Heading weight.
        statsColumns:
          type:
            - string
            - 'null'
          title: Stats per row
          description: >-
            Auto fits as many as comfortably fit and works for any number of
            stats. Or lock a maximum per row.
          default: auto
          enum:
            - auto
            - '2'
            - '3'
            - '4'
            - null
        statsGap:
          type:
            - string
            - 'null'
          title: Gap between stats
          default: normal
          enum:
            - tight
            - normal
            - roomy
            - null
          description: Gap between stats.
        statsSize:
          type:
            - string
            - 'null'
          title: Overall stat size
          description: >-
            The baseline scale for the whole stat (value / icon / label /
            description stay proportional). Fine-tune any single element with
            its own size control below.
          default: medium
          enum:
            - small
            - medium
            - large
            - null
        statsAlign:
          type:
            - string
            - 'null'
          title: Alignment
          default: center
          enum:
            - center
            - left
            - null
          description: Alignment.
        statsDividers:
          type: boolean
          title: Vertical dividers between stats
          description: >-
            A hairline rule between each stat — the classic "by the numbers"
            rail.
          default: false
        statsCountUp:
          type: boolean
          title: Animate count-up on scroll
          description: >-
            Numbers tick up from zero when the band scrolls into view.
            Non-numeric values and reduced-motion visitors simply show the final
            value.
          default: true
        statsIconSize:
          type:
            - string
            - 'null'
          title: Icon size
          description: >-
            Size of the icon above each number, independent of the overall stat
            size.
          default: auto
          enum:
            - auto
            - sm
            - md
            - lg
            - xl
            - xxl
            - null
        statsIconGap:
          type:
            - string
            - 'null'
          title: Icon spacing
          description: Space between the icon and the number below it.
          default: normal
          enum:
            - tight
            - normal
            - roomy
            - null
        statsValueSize:
          type:
            - string
            - 'null'
          title: Value size
          default: auto
          enum:
            - auto
            - xs
            - sm
            - md
            - lg
            - xl
            - null
          description: Value size.
        statsValueWeight:
          type:
            - string
            - 'null'
          title: Value weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Value weight.
        statsValueColor:
          type:
            - string
            - 'null'
          description: >-
            The big numeral. Optional — leave empty to use the site accent
            color.
          title: Value color (dark theme)
        statsValueColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the accent.
          title: Value color (light theme)
        statsLabelSize:
          type:
            - string
            - 'null'
          title: Label size
          default: auto
          enum:
            - auto
            - xs
            - sm
            - md
            - lg
            - xl
            - null
          description: Label size.
        statsLabelWeight:
          type:
            - string
            - 'null'
          title: Label weight
          default: semibold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Label weight.
        statsLabelColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Label color (dark theme)
        statsLabelColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Label color (light theme)
        statsDescriptionSize:
          type:
            - string
            - 'null'
          title: Description size
          default: auto
          enum:
            - auto
            - xs
            - sm
            - md
            - lg
            - xl
            - null
          description: Description size.
        statsDescriptionWeight:
          type:
            - string
            - 'null'
          title: Description weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Description weight.
        statsDescriptionColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Description color (dark theme)
        statsDescriptionColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Description color (light theme)
        stats:
          type: array
          items:
            $ref: '#/components/schemas/StatsWidgetStatsItem'
          title: Stats
          default:
            - icon: users
              value: 5,000
              valueSuffix: +
              label: Happy customers
              description: And the list keeps growing.
            - icon: calendar-days
              value: '12'
              label: Years in business
              description: Doing this since day one.
            - icon: circle-check
              value: '99'
              valueSuffix: '%'
              label: Satisfaction
              description: Based on customer feedback.
            - icon: star
              value: '4.9'
              label: Average rating
              description: From verified customer reviews.
          description: Stats.
        statsBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        statsBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        statsBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        statsBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        statsFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/StatsWidgetStatsFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        statsCtaLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: ''
        statsCtaUrl:
          type: string
          title: Button link
          description: Where the button goes — a path (/blog) or full URL.
          default: ''
        statsCtaNewTab:
          type: boolean
          title: Open in new tab
          description: >-
            Opens the link in a new browser tab (adds rel="noopener
            noreferrer").
          default: false
        statsCtaVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: outline
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        statsCtaSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        statsCtaRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        statsCtaColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        statsCtaColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        statsCtaTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        statsCtaTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        statsCtaHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        statsCtaHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        statsCtaStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        statsCtaShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        statsCtaShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        statsCtaAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        statsCtaIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: arrow-right
        statsCtaIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        statsCtaIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: after
          enum:
            - before
            - after
            - null
        statsCtaIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `stats` widget: its `type` and its own fields. A field left out takes
        its default.
      additionalProperties: true
    StepsWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - steps
          description: 'The widget’s type: always `steps`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        stepsEyebrowEnabled:
          type: boolean
          title: Show eyebrow
          description: A small label above the heading (e.g. "How it works").
          default: true
        stepsEyebrow:
          type: string
          title: Eyebrow
          default: How it works
          description: Eyebrow.
        stepsEyebrowColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the secondary (mint) color.
          title: Eyebrow color (dark theme)
        stepsEyebrowColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Eyebrow color (light theme)
        stepsEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        stepsEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        stepsHeading:
          type: string
          title: Heading
          description: Optional. Leave empty to show just the steps.
          default: Get started in four steps
        stepsHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Heading color (dark theme)
        stepsHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Heading color (light theme)
        stepsHeadingWeight:
          type:
            - string
            - 'null'
          title: Heading weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Heading weight.
        stepsHeadingSize:
          type:
            - string
            - 'null'
          title: Heading size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Heading size.
        stepsIntro:
          type: string
          title: Intro line
          description: Optional short sentence under the heading.
          default: A simple, step-by-step path from first contact to done.
        stepsIntroColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Intro color (dark theme)
        stepsIntroColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Intro color (light theme)
        stepsIntroWeight:
          type:
            - string
            - 'null'
          title: Intro weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Intro weight.
        stepsIntroSize:
          type:
            - string
            - 'null'
          title: Intro size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Intro size.
        stepsLayout:
          type:
            - string
            - 'null'
          title: Layout
          description: >-
            Horizontal lays the steps across a row (marker on top); Vertical
            stacks them as a classic timeline (marker on the left).
          default: horizontal
          enum:
            - horizontal
            - vertical
            - null
        stepsColumns:
          type:
            - string
            - 'null'
          title: Steps per row
          description: >-
            Horizontal only. Auto fits as many as comfortably fit and works for
            any number of steps. Or lock a maximum per row.
          default: auto
          enum:
            - auto
            - '2'
            - '3'
            - '4'
            - null
        stepsGap:
          type:
            - string
            - 'null'
          title: Gap between steps
          default: normal
          enum:
            - tight
            - normal
            - roomy
            - null
          description: Gap between steps.
        stepsAlign:
          type:
            - string
            - 'null'
          title: Alignment
          description: >-
            Horizontal only — aligns the section header and each step’s text.
            (Vertical is always left-aligned beside its marker.)
          default: center
          enum:
            - center
            - left
            - null
        stepsConnector:
          type: boolean
          title: Show connector line
          description: >-
            A line linking the step markers into a timeline (down the markers
            when vertical, across them when horizontal).
          default: true
        stepsCardStyle:
          type:
            - string
            - 'null'
          title: Step style
          description: >-
            Plain keeps the connector-linked timeline (just marker + text, no
            card). Every other style boxes each step — Raised is a quiet lit
            card, Luxe a frosted glass panel, Outline a plaque frame, Spine adds
            a color rail, Tint an accent wash; Ticket/Bracket/Forge/Press/Inlay
            are the graphic showstoppers.
          default: plain
          enum:
            - raised
            - luxe
            - outline
            - plain
            - poster
            - edge
            - tint
            - ticket
            - bracket
            - forge
            - press
            - inlay
            - null
        stepsCardStyleRadius:
          type:
            - string
            - 'null'
          title: Card corners
          description: >-
            Corner rounding for each card. Default keeps the widget’s own tuned
            corners — except Forge, which defaults to tight machined corners
            matching its engraved frame.
          default: default
          enum:
            - default
            - square
            - slight
            - rounded
            - large
            - null
        stepsCardStyleAccentColor:
          type:
            - string
            - 'null'
          description: >-
            Colors the Spine rail, Bracket marks, Forge corner/frame and Press
            margin rule. Leave empty to use the brand accent.
          title: Card style color (dark theme)
        stepsCardStyleAccentColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Card style color (light theme)
        stepsCardStyleForgeScope:
          type:
            - string
            - 'null'
          title: Forge color placement
          description: >-
            Where the Forge plate wears its color: a single corner mark (the
            machinist’s datum, default) or the whole engraved frame.
          default: corner
          enum:
            - corner
            - frame
            - null
        stepsCardStyleForgeWeight:
          type:
            - string
            - 'null'
          title: Forge line weight
          description: Thickness of the Forge corner mark / colored frame.
          default: fine
          enum:
            - fine
            - medium
            - bold
            - null
        stepsCardHover:
          type:
            - string
            - 'null'
          title: Hover effect
          description: >-
            What a boxed step does on hover (applies when Step style is not
            Plain). Lift/Pop/Press/Glow/Outline are instant; Sheen sweeps a
            light across; Tilt, Magnetic and Spotlight follow the cursor (need
            site animations on).
          default: none
          enum:
            - none
            - lift
            - pop
            - press
            - glow
            - border
            - sheen
            - tilt
            - magnetic
            - spotlight
            - null
        stepsMarker:
          type:
            - string
            - 'null'
          title: Step marker
          description: >-
            Number auto-counts 1, 2, 3…; Icon shows each step’s icon (falling
            back to the number when a step has none); None hides the marker
            badge.
          default: number
          enum:
            - number
            - icon
            - none
            - null
        stepsMarkerStyle:
          type:
            - string
            - 'null'
          title: Marker style
          description: >-
            Soft is a tinted accent badge; Filled is a solid accent badge;
            Outline is a bordered badge.
          default: soft
          enum:
            - soft
            - filled
            - outline
            - null
        stepsMarkerShape:
          type:
            - string
            - 'null'
          title: Marker shape
          default: circle
          enum:
            - circle
            - rounded
            - square
            - null
          description: Marker shape.
        stepsMarkerSize:
          type:
            - string
            - 'null'
          title: Marker size
          default: medium
          enum:
            - small
            - medium
            - large
            - null
          description: Marker size.
        stepsAccentColor:
          type:
            - string
            - 'null'
          description: >-
            Color for the marker badge and the connector line. Leave empty to
            use the site accent color.
          title: Accent color (dark theme)
        stepsAccentColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme accent.
          title: Accent color (light theme)
        stepsTitleSize:
          type:
            - string
            - 'null'
          title: Title size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Title size.
        stepsTitleWeight:
          type:
            - string
            - 'null'
          title: Title weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Title weight.
        stepsTitleColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Title color (dark theme)
        stepsTitleColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Title color (light theme)
        stepsBodySize:
          type:
            - string
            - 'null'
          title: Body size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Body size.
        stepsBodyWeight:
          type:
            - string
            - 'null'
          title: Body weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Body weight.
        stepsBodyColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Body color (dark theme)
        stepsBodyColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Body color (light theme)
        stepsItems:
          type: array
          items:
            $ref: '#/components/schemas/StepsWidgetStepsItemsItem'
          title: Steps
          description: >-
            Each item is one step in the process. They render in this order; the
            number marker counts automatically.
          default:
            - icon: calendar-check
              title: Reach out
              body: >-
                Get in touch and tell us what you’re looking for — it only takes
                a minute.
            - icon: comments
              title: Say hello
              body: >-
                A quick conversation so we understand your goals and you get to
                know us.
            - icon: gear
              title: We get to work
              body: >-
                We take it from here and keep you in the loop every step of the
                way.
            - icon: circle-check
              title: All done
              body: Wrap up knowing exactly what happened — and what comes next.
        stepsBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        stepsBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        stepsBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        stepsBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        stepsFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/StepsWidgetStepsFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        stepsCtaLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: ''
        stepsCtaUrl:
          type: string
          title: Button link
          description: Where the button goes — a path (/blog) or full URL.
          default: ''
        stepsCtaNewTab:
          type: boolean
          title: Open in new tab
          description: >-
            Opens the link in a new browser tab (adds rel="noopener
            noreferrer").
          default: false
        stepsCtaVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: solid
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        stepsCtaSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        stepsCtaRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        stepsCtaColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        stepsCtaColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        stepsCtaTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        stepsCtaTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        stepsCtaHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        stepsCtaHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        stepsCtaStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        stepsCtaShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        stepsCtaShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        stepsCtaAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        stepsCtaIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: arrow-right
        stepsCtaIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        stepsCtaIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: after
          enum:
            - before
            - after
            - null
        stepsCtaIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `steps` widget: its `type` and its own fields. A field left out takes
        its default.
      additionalProperties: true
    PricingWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - pricing
          description: 'The widget’s type: always `pricing`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        pricingEyebrowEnabled:
          type: boolean
          title: Show eyebrow
          description: A small label above the heading (e.g. "Pricing").
          default: true
        pricingEyebrow:
          type: string
          title: Eyebrow
          default: Pricing
          description: Eyebrow.
        pricingEyebrowColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the secondary (mint) color.
          title: Eyebrow color (dark theme)
        pricingEyebrowColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Eyebrow color (light theme)
        pricingEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        pricingEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        pricingHeading:
          type: string
          title: Heading
          description: Optional. Leave empty to show just the cards.
          default: Simple, transparent pricing
        pricingHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Heading color (dark theme)
        pricingHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Heading color (light theme)
        pricingHeadingWeight:
          type:
            - string
            - 'null'
          title: Heading weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Heading weight.
        pricingHeadingSize:
          type:
            - string
            - 'null'
          title: Heading size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Heading size.
        pricingIntro:
          type: string
          title: Intro line
          description: Optional short sentence under the heading.
          default: >-
            Pick the package that fits. No hidden fees — change or cancel any
            time.
        pricingIntroColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Intro color (dark theme)
        pricingIntroColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Intro color (light theme)
        pricingIntroWeight:
          type:
            - string
            - 'null'
          title: Intro weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Intro weight.
        pricingIntroSize:
          type:
            - string
            - 'null'
          title: Intro size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Intro size.
        pricingColumns:
          type:
            - string
            - 'null'
          title: Cards per row
          description: >-
            Auto fits as many as comfortably fit and works for any number of
            cards. Or lock a maximum per row.
          default: auto
          enum:
            - auto
            - '2'
            - '3'
            - '4'
            - null
        pricingGap:
          type:
            - string
            - 'null'
          title: Gap between cards
          default: normal
          enum:
            - tight
            - normal
            - roomy
            - null
          description: Gap between cards.
        pricingCardStyle:
          type:
            - string
            - 'null'
          title: Card style
          description: >-
            The base treatment for every tier (a highlighted tier always gets
            its own bold framed look). Raised is a quiet lit card; Luxe a
            frosted glass panel; Outline a plaque frame; Spine adds a color
            rail; Tint an accent wash; Ticket/Bracket/Forge/Press/Inlay are the
            graphic showstoppers.
          default: raised
          enum:
            - raised
            - luxe
            - outline
            - plain
            - poster
            - edge
            - tint
            - ticket
            - bracket
            - forge
            - press
            - inlay
            - null
        pricingCardStyleRadius:
          type:
            - string
            - 'null'
          title: Card corners
          description: >-
            Corner rounding for each card. Default keeps the widget’s own tuned
            corners — except Forge, which defaults to tight machined corners
            matching its engraved frame.
          default: default
          enum:
            - default
            - square
            - slight
            - rounded
            - large
            - null
        pricingCardStyleAccentColor:
          type:
            - string
            - 'null'
          description: >-
            Colors the Spine rail, Bracket marks, Forge corner/frame and Press
            margin rule. Leave empty to use the brand accent.
          title: Card style color (dark theme)
        pricingCardStyleAccentColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Card style color (light theme)
        pricingCardStyleForgeScope:
          type:
            - string
            - 'null'
          title: Forge color placement
          description: >-
            Where the Forge plate wears its color: a single corner mark (the
            machinist’s datum, default) or the whole engraved frame.
          default: corner
          enum:
            - corner
            - frame
            - null
        pricingCardStyleForgeWeight:
          type:
            - string
            - 'null'
          title: Forge line weight
          description: Thickness of the Forge corner mark / colored frame.
          default: fine
          enum:
            - fine
            - medium
            - bold
            - null
        pricingAlign:
          type:
            - string
            - 'null'
          title: Alignment
          description: Aligns the section header and the text inside each card.
          default: center
          enum:
            - center
            - left
            - null
        pricingEqualHeight:
          type: boolean
          title: Equal-height cards
          description: >-
            Stretch every card to the tallest one and pin each button to the
            bottom, so the cards line up even with uneven feature lists.
          default: true
        pricingFeatureMarkers:
          type: boolean
          title: Show feature check marks
          description: >-
            A check (included) or cross (not included) before each feature. Off
            = a plain list.
          default: true
        pricingCardHover:
          type:
            - string
            - 'null'
          title: Card hover effect
          description: >-
            How a card reacts to the pointer. Rise floats it up on an accent
            underglow; Selection ring previews the highlighted look + tints the
            price; Spotlight washes accent light over the price; Checklist
            lights up the ✓ marks one-by-one; Tilt is a 3-D parallax that only
            runs when site animations are on.
          default: rise
          enum:
            - none
            - rise
            - ring
            - spotlight
            - checklist
            - tilt
            - null
        pricingHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Border / glow / spotlight / checkmark color on hover. Leave empty to
            use the highlight accent (then the site accent).
          title: Hover accent (dark theme)
        pricingHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            accent.
          title: Hover accent (light theme)
        pricingEntrance:
          type:
            - string
            - 'null'
          title: Scroll-in animation
          description: >-
            How the cards animate in as they scroll into view. Featured-led
            makes the highlighted tier settle last with a little emphasis (draws
            the eye to the recommended plan); Simple stagger fades them in
            evenly. Only plays when site animations are on (Site design →
            Motion) — otherwise the cards are simply shown.
          default: featured
          enum:
            - featured
            - stagger
            - none
            - null
        pricingNameSize:
          type:
            - string
            - 'null'
          title: Card name size
          description: Size of each card’s name / title.
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
        pricingPriceSize:
          type:
            - string
            - 'null'
          title: Price size
          description: Size of the price amount (the period and price note scale with it).
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
        pricingDescSize:
          type:
            - string
            - 'null'
          title: Description size
          description: Size of each card’s description blurb.
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
        pricingFeatureSize:
          type:
            - string
            - 'null'
          title: Feature size
          description: Size of the feature list text (notes and check marks scale with it).
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
        pricingHighlightBadge:
          type: string
          title: Default highlight badge
          description: >-
            Ribbon text shown on a highlighted tier that doesn’t set its own
            badge. Each tier can override it (or badge a non-highlighted tier)
            below. Leave empty for no automatic badge.
          default: Most popular
        pricingAccentColor:
          type:
            - string
            - 'null'
          description: >-
            Color for the highlighted tier’s border + ring and each tier’s
            badge. Leave empty to use the site accent color.
          title: Highlight accent (dark theme)
        pricingAccentColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme accent.
          title: Highlight accent (light theme)
        pricingTiers:
          type: array
          items:
            $ref: '#/components/schemas/PricingWidgetPricingTiersItem'
          title: Pricing cards
          description: >-
            Each card is one tier / package / service. Toggle “Highlight” on the
            one you want to stand out.
          default:
            - name: Basic
              price: $29
              period: / month
              description: The essentials, done well.
              features:
                - text: Core service
                  included: true
                - text: Email support
                  included: true
                - text: Monthly check-in
                  included: true
                - text: Priority scheduling
                  included: false
              ctaLabel: Get started
              ctaUrl: /contact-us
            - name: Standard
              highlighted: true
              price: $59
              period: / month
              description: Our most popular choice.
              features:
                - text: Everything in Basic
                  included: true
                - text: Phone and email support
                  included: true
                - text: Weekly check-ins
                  included: true
                - text: Priority scheduling
                  included: true
              ctaLabel: Get started
              ctaUrl: /contact-us
            - name: Premium
              price: Custom
              period: ''
              priceNote: Billed annually
              description: Tailored to exactly what you need.
              features:
                - text: Everything in Standard
                  included: true
                - text: A dedicated contact
                  included: true
                - text: Flexible scheduling
                  included: true
                - text: Custom extras
                  included: true
              ctaLabel: Contact us
              ctaUrl: /contact-us
        pricingBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        pricingBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        pricingBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        pricingBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        pricingFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/PricingWidgetPricingFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        pricingFeaturedCtaLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: Get started
        pricingFeaturedCtaUrl:
          type: string
          title: Button link
          description: Where the button goes — a path (/blog) or full URL.
          default: /contact-us
        pricingFeaturedCtaNewTab:
          type: boolean
          title: Open in new tab
          description: >-
            Opens the link in a new browser tab (adds rel="noopener
            noreferrer").
          default: false
        pricingFeaturedCtaVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: solid
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        pricingFeaturedCtaSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        pricingFeaturedCtaRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        pricingFeaturedCtaColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        pricingFeaturedCtaColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        pricingFeaturedCtaTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        pricingFeaturedCtaTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        pricingFeaturedCtaHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        pricingFeaturedCtaHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        pricingFeaturedCtaStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        pricingFeaturedCtaShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        pricingFeaturedCtaShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        pricingFeaturedCtaAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        pricingFeaturedCtaIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: arrow-right
        pricingFeaturedCtaIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        pricingFeaturedCtaIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: after
          enum:
            - before
            - after
            - null
        pricingFeaturedCtaIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        pricingCtaLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: Choose plan
        pricingCtaUrl:
          type: string
          title: Button link
          description: Where the button goes — a path (/blog) or full URL.
          default: /contact-us
        pricingCtaNewTab:
          type: boolean
          title: Open in new tab
          description: >-
            Opens the link in a new browser tab (adds rel="noopener
            noreferrer").
          default: false
        pricingCtaVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: outline
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        pricingCtaSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        pricingCtaRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        pricingCtaColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        pricingCtaColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        pricingCtaTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        pricingCtaTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        pricingCtaHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        pricingCtaHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        pricingCtaStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        pricingCtaShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        pricingCtaShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        pricingCtaAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        pricingCtaIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: arrow-right
        pricingCtaIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        pricingCtaIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: after
          enum:
            - before
            - after
            - null
        pricingCtaIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `pricing` widget: its `type` and its own fields. A field left out
        takes its default.
      additionalProperties: true
    MediaTextWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - media-text
          description: 'The widget’s type: always `media-text`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        mediaTextEyebrowEnabled:
          type: boolean
          title: Show eyebrow
          description: A small label above the section heading (e.g. "Why us").
          default: true
        mediaTextEyebrow:
          type: string
          title: Eyebrow
          default: Why us
          description: Eyebrow.
        mediaTextEyebrowColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the secondary (mint) color.
          title: Eyebrow color (dark theme)
        mediaTextEyebrowColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Eyebrow color (light theme)
        mediaTextEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        mediaTextEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        mediaTextHeading:
          type: string
          title: Heading
          description: >-
            Optional section heading above the blocks. Leave empty to show just
            the blocks.
          default: What sets us apart
        mediaTextHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Heading color (dark theme)
        mediaTextHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Heading color (light theme)
        mediaTextHeadingWeight:
          type:
            - string
            - 'null'
          title: Heading weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Heading weight.
        mediaTextHeadingSize:
          type:
            - string
            - 'null'
          title: Heading size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Heading size.
        mediaTextIntro:
          type: string
          title: Intro line
          description: Optional short sentence under the heading.
          default: >-
            A few of the things that make the difference — shown in pictures and
            a little copy.
        mediaTextIntroColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Intro color (dark theme)
        mediaTextIntroColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Intro color (light theme)
        mediaTextIntroWeight:
          type:
            - string
            - 'null'
          title: Intro weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Intro weight.
        mediaTextIntroSize:
          type:
            - string
            - 'null'
          title: Intro size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Intro size.
        mediaTextAlign:
          type:
            - string
            - 'null'
          title: Text alignment
          description: >-
            Aligns the section header and the text inside each block.
            (Side-by-side rows usually read best left-aligned.)
          default: left
          enum:
            - left
            - center
            - null
        mediaTextRatio:
          type:
            - string
            - 'null'
          title: Media / text split
          description: >-
            For media-left / media-right rows: how the two columns share the
            width.
          default: balanced
          enum:
            - balanced
            - media
            - text
            - null
        mediaTextVAlign:
          type:
            - string
            - 'null'
          title: Vertical alignment
          description: >-
            For media-left / media-right rows: how the text lines up against the
            media.
          default: center
          enum:
            - center
            - top
            - null
        mediaTextMediaRatio:
          type:
            - string
            - 'null'
          title: Media shape
          description: >-
            Aspect ratio of the media frame. Auto keeps an image at its natural
            shape (videos and embeds always use a ratio).
          default: landscape
          enum:
            - auto
            - landscape
            - standard
            - square
            - portrait
            - wide
            - null
        mediaTextMediaRadius:
          type:
            - string
            - 'null'
          title: Media corners
          default: large
          enum:
            - large
            - rounded
            - slight
            - square
            - null
          description: Media corners.
        mediaTextGap:
          type:
            - string
            - 'null'
          title: Gap between blocks
          default: normal
          enum:
            - tight
            - normal
            - roomy
            - null
          description: Gap between blocks.
        mediaTextDividers:
          type: boolean
          title: Show dividers between blocks
          description: A hairline rule between blocks.
          default: false
        mediaTextBlockEyebrowColor:
          type:
            - string
            - 'null'
          description: >-
            Each block’s eyebrow color. Leave empty to use the secondary (mint)
            color.
          title: Block eyebrow color (dark theme)
        mediaTextBlockEyebrowColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Block eyebrow color (light theme)
        mediaTextBlockEyebrowWeight:
          type:
            - string
            - 'null'
          title: Block eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Block eyebrow weight.
        mediaTextBlockHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Block heading color (dark theme)
        mediaTextBlockHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Block heading color (light theme)
        mediaTextBlockHeadingWeight:
          type:
            - string
            - 'null'
          title: Block heading weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Block heading weight.
        mediaTextBlockHeadingSize:
          type:
            - string
            - 'null'
          title: Block heading size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Block heading size.
        mediaTextBodyColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Block body color (dark theme)
        mediaTextBodyColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Block body color (light theme)
        mediaTextBodyWeight:
          type:
            - string
            - 'null'
          title: Block body weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Block body weight.
        mediaTextBodySize:
          type:
            - string
            - 'null'
          title: Block body size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Block body size.
        mediaTextBlocks:
          type: array
          items:
            $ref: '#/components/schemas/MediaTextWidgetMediaTextBlocksItem'
          title: Blocks
          description: >-
            Each block is one media + text row. They render top to bottom in
            this order; alternate “Media left” / “Media right” for a classic
            zig-zag.
          default:
            - layout: media-right
              mediaType: image
              eyebrow: The basics
              heading: Tell your story, one block at a time
              body: >-
                Pair an image, a video, or an embed with a column of copy. Each
                block picks its own layout, so a page reads naturally from top
                to bottom.
              ctaLabel: Learn more
              ctaUrl: /about-us
            - layout: media-left
              mediaType: image
              eyebrow: Flexible by design
              heading: Mix media and message
              body: >-
                Alternate media left and right for a classic zig-zag, stack
                media on top, or run it full-bleed edge to edge.
              ctaLabel: Learn more
              ctaUrl: /about-us
            - layout: full
              mediaType: image
              eyebrow: Make it yours
              heading: Every label is editable
              body: >-
                Nothing here is tied to one business — swap the copy, choose
                your media, and the section adapts to whatever you need.
        mediaTextBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        mediaTextBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        mediaTextBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        mediaTextBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        mediaTextFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/MediaTextWidgetMediaTextFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        mediaTextCtaVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: solid
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        mediaTextCtaSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        mediaTextCtaRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        mediaTextCtaColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        mediaTextCtaColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        mediaTextCtaTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        mediaTextCtaTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        mediaTextCtaHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        mediaTextCtaHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        mediaTextCtaStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        mediaTextCtaShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        mediaTextCtaShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        mediaTextCtaAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        mediaTextCtaIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: arrow-right
        mediaTextCtaIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        mediaTextCtaIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: after
          enum:
            - before
            - after
            - null
        mediaTextCtaIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `media-text` widget: its `type` and its own fields. A field left out
        takes its default.
      additionalProperties: true
    DeviceMockWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - device-mock
          description: 'The widget’s type: always `device-mock`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        deviceMockArrangement:
          type:
            - string
            - 'null'
          title: Arrangement
          description: >-
            Which devices to show. Duo overlaps a phone on the corner of a
            desktop browser; Trio adds a TV behind them (on narrow screens Trio
            drops the TV and shows as a Duo). Each device used gets its own
            screen tab.
          default: duo
          enum:
            - duo
            - trio
            - desktop
            - phone
            - tv
            - null
        deviceMockTextPlacement:
          type:
            - string
            - 'null'
          title: Text placement
          description: >-
            Where the eyebrow / heading / intro / button sit. Left or right puts
            the text in a column beside the devices (stacked above them on
            narrow screens); None shows the devices only.
          default: above
          enum:
            - above
            - left
            - right
            - none
            - null
        deviceMockSize:
          type:
            - string
            - 'null'
          title: Device size
          description: How large the devices render within the section.
          default: normal
          enum:
            - compact
            - normal
            - large
            - null
        deviceMockBrowserRatio:
          type:
            - string
            - 'null'
          title: Desktop screen shape
          description: The browser window’s content area. Match your desktop captures.
          default: '16:10'
          enum:
            - '16:10'
            - '16:9'
            - null
        deviceMockBrowserUrl:
          type: string
          title: Browser address bar text
          description: >-
            The address shown in the browser toolbar — decoration only, not a
            link.
          default: app.example.com
        deviceMockPhoneStatusBar:
          type: boolean
          title: Draw a phone status bar
          description: >-
            Adds a time / signal / battery bar across the top of the phone
            screen. Leave off for native phone screenshots — they already
            include the real status bar.
          default: false
        deviceMockPhoneTime:
          type: string
          title: Status bar time
          default: '9:41'
          description: Status bar time.
        deviceMockMotionPause:
          type: boolean
          title: Show pause button on background motion
          description: >-
            Adds a small, unobtrusive pause/play control so visitors can stop
            the auto-playing background motion (WCAG 2.2.2). Only appears when a
            moving background is set.
          default: true
        deviceMockEyebrowEnabled:
          type: boolean
          title: Show eyebrow
          description: A small label above the heading (e.g. "Product tour").
          default: true
        deviceMockEyebrow:
          type: string
          title: Eyebrow
          description: Small label shown above the title.
          default: Product tour
        deviceMockEyebrowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the eyebrow + its dash. Leave empty to use the
            secondary (mint) color.
          title: Eyebrow color (dark theme)
        deviceMockEyebrowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the mint default.
          title: Eyebrow color (light theme)
        deviceMockEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        deviceMockEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        deviceMockHeading:
          type: string
          title: Heading
          description: Optional. Leave empty to show just the devices.
          default: See it in action
        deviceMockHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Heading color (dark theme)
        deviceMockHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Heading color (light theme)
        deviceMockHeadingWeight:
          type:
            - string
            - 'null'
          title: Heading weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Heading weight.
        deviceMockHeadingSize:
          type:
            - string
            - 'null'
          title: Heading size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Heading size.
        deviceMockIntro:
          type: string
          title: Intro
          description: Optional short paragraph under the heading.
          default: >-
            A closer look at the experience — on the big screen, at the desk,
            and on the go.
        deviceMockIntroColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Intro color (dark theme)
        deviceMockIntroColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Intro color (light theme)
        deviceMockIntroWeight:
          type:
            - string
            - 'null'
          title: Intro weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Intro weight.
        deviceMockIntroSize:
          type:
            - string
            - 'null'
          title: Intro size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Intro size.
        deviceMockCaption:
          type: string
          title: Caption (optional)
          description: A short line shown under the devices.
          default: ''
        deviceMockTvMediaType:
          type:
            - string
            - 'null'
          title: TV screen shows
          description: A still screenshot, or a short looping screen recording.
          default: image
          enum:
            - image
            - video
            - null
        _deviceMockTvImage:
          type: array
          items:
            type: object
            additionalProperties: true
          title: TV screenshot
          description: >-
            Use a native-resolution 16:9 capture of the screen with NO device
            frame (the frame is drawn for you) — e.g. 1920 × 1080 or 3840 ×
            2160. The related `@apostrophecms/image` documents, in order (empty
            when none). To set it, send a list of `{ "_id": "…" }`, one per
            document (one at most); a document the site can’t find is left out.
          maxItems: 1
        deviceMockTvImageAlt:
          type: string
          title: TV screenshot alt text
          description: >-
            Required once a screenshot is picked. Describe what the screen shows
            for visitors who can’t see it — e.g. “Dashboard with a weekly
            activity chart and a list of recent orders”. Skip the device itself
            (“a phone showing…”); the frame is decorative.
          default: ''
        _deviceMockTvVideo:
          type: array
          items:
            type: object
            additionalProperties: true
          title: TV video
          description: >-
            Pick a clip from the Videos library (⌘K → Videos). It plays as a
            short, muted, looping screen recording — keep it SHORT (about 5–15
            seconds) and SMALL (under about 10 MB; an H.264 MP4 without an audio
            track is ideal), and give the Videos item a poster image: visitors
            see the poster first, and reduced-motion visitors only ever see the
            poster. Use a native-resolution 16:9 capture of the screen with NO
            device frame (the frame is drawn for you) — e.g. 1920 × 1080 or 3840
            × 2160. The related `video` documents, in order (empty when none).
            To set it, send a list of `{ "_id": "…" }`, one per document (one at
            most); a document the site can’t find is left out.
          maxItems: 1
        deviceMockTvVideoAlt:
          type: string
          title: TV video description
          description: >-
            Recommended. A short description of what the recording shows, read
            to screen-reader users — e.g. “Creating a new project in three
            clicks”. Leave empty only if the surrounding text already says it.
          default: ''
        deviceMockTvFit:
          type:
            - string
            - 'null'
          title: TV media fit
          description: >-
            Fill crops the media to fill the whole screen (best for native
            captures). Fit shows the whole image or video, leaving bars if its
            shape differs from the screen.
          default: cover
          enum:
            - cover
            - contain
            - null
        deviceMockTvAnchor:
          type:
            - string
            - 'null'
          title: TV media anchor
          description: >-
            Which part stays visible when the media is cropped. Top keeps an
            app’s header in view — right for most screenshots.
          default: top
          enum:
            - top
            - center
            - bottom
            - null
        deviceMockDesktopMediaType:
          type:
            - string
            - 'null'
          title: Desktop screen shows
          description: A still screenshot, or a short looping screen recording.
          default: image
          enum:
            - image
            - video
            - null
        _deviceMockDesktopImage:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Desktop screenshot
          description: >-
            Use a native-resolution capture of the page content only — no
            browser toolbar and no device frame (both are drawn for you). 16:10
            (e.g. 2880 × 1800) or 16:9 (e.g. 2560 × 1440), matching the “Desktop
            screen shape” setting. The related `@apostrophecms/image` documents,
            in order (empty when none). To set it, send a list of `{ "_id": "…"
            }`, one per document (one at most); a document the site can’t find
            is left out.
          maxItems: 1
        deviceMockDesktopImageAlt:
          type: string
          title: Desktop screenshot alt text
          description: >-
            Required once a screenshot is picked. Describe what the screen shows
            for visitors who can’t see it — e.g. “Dashboard with a weekly
            activity chart and a list of recent orders”. Skip the device itself
            (“a phone showing…”); the frame is decorative.
          default: ''
        _deviceMockDesktopVideo:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Desktop video
          description: >-
            Pick a clip from the Videos library (⌘K → Videos). It plays as a
            short, muted, looping screen recording — keep it SHORT (about 5–15
            seconds) and SMALL (under about 10 MB; an H.264 MP4 without an audio
            track is ideal), and give the Videos item a poster image: visitors
            see the poster first, and reduced-motion visitors only ever see the
            poster. Use a native-resolution capture of the page content only —
            no browser toolbar and no device frame (both are drawn for you).
            16:10 (e.g. 2880 × 1800) or 16:9 (e.g. 2560 × 1440), matching the
            “Desktop screen shape” setting. The related `video` documents, in
            order (empty when none). To set it, send a list of `{ "_id": "…" }`,
            one per document (one at most); a document the site can’t find is
            left out.
          maxItems: 1
        deviceMockDesktopVideoAlt:
          type: string
          title: Desktop video description
          description: >-
            Recommended. A short description of what the recording shows, read
            to screen-reader users — e.g. “Creating a new project in three
            clicks”. Leave empty only if the surrounding text already says it.
          default: ''
        deviceMockDesktopFit:
          type:
            - string
            - 'null'
          title: Desktop media fit
          description: >-
            Fill crops the media to fill the whole screen (best for native
            captures). Fit shows the whole image or video, leaving bars if its
            shape differs from the screen.
          default: cover
          enum:
            - cover
            - contain
            - null
        deviceMockDesktopAnchor:
          type:
            - string
            - 'null'
          title: Desktop media anchor
          description: >-
            Which part stays visible when the media is cropped. Top keeps an
            app’s header in view — right for most screenshots.
          default: top
          enum:
            - top
            - center
            - bottom
            - null
        deviceMockPhoneMediaType:
          type:
            - string
            - 'null'
          title: Phone screen shows
          description: A still screenshot, or a short looping screen recording.
          default: image
          enum:
            - image
            - video
            - null
        _deviceMockPhoneImage:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Phone screenshot
          description: >-
            Use a native-resolution portrait screenshot with NO device frame
            (the frame is drawn for you) — e.g. 1179 × 2556 or 1290 × 2796
            (about 9:19.5). The related `@apostrophecms/image` documents, in
            order (empty when none). To set it, send a list of `{ "_id": "…" }`,
            one per document (one at most); a document the site can’t find is
            left out.
          maxItems: 1
        deviceMockPhoneImageAlt:
          type: string
          title: Phone screenshot alt text
          description: >-
            Required once a screenshot is picked. Describe what the screen shows
            for visitors who can’t see it — e.g. “Dashboard with a weekly
            activity chart and a list of recent orders”. Skip the device itself
            (“a phone showing…”); the frame is decorative.
          default: ''
        _deviceMockPhoneVideo:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Phone video
          description: >-
            Pick a clip from the Videos library (⌘K → Videos). It plays as a
            short, muted, looping screen recording — keep it SHORT (about 5–15
            seconds) and SMALL (under about 10 MB; an H.264 MP4 without an audio
            track is ideal), and give the Videos item a poster image: visitors
            see the poster first, and reduced-motion visitors only ever see the
            poster. Use a native-resolution portrait screenshot with NO device
            frame (the frame is drawn for you) — e.g. 1179 × 2556 or 1290 × 2796
            (about 9:19.5). The related `video` documents, in order (empty when
            none). To set it, send a list of `{ "_id": "…" }`, one per document
            (one at most); a document the site can’t find is left out.
          maxItems: 1
        deviceMockPhoneVideoAlt:
          type: string
          title: Phone video description
          description: >-
            Recommended. A short description of what the recording shows, read
            to screen-reader users — e.g. “Creating a new project in three
            clicks”. Leave empty only if the surrounding text already says it.
          default: ''
        deviceMockPhoneFit:
          type:
            - string
            - 'null'
          title: Phone media fit
          description: >-
            Fill crops the media to fill the whole screen (best for native
            captures). Fit shows the whole image or video, leaving bars if its
            shape differs from the screen.
          default: cover
          enum:
            - cover
            - contain
            - null
        deviceMockPhoneAnchor:
          type:
            - string
            - 'null'
          title: Phone media anchor
          description: >-
            Which part stays visible when the media is cropped. Top keeps an
            app’s header in view — right for most screenshots.
          default: top
          enum:
            - top
            - center
            - bottom
            - null
        deviceMockBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        deviceMockBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        deviceMockBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        deviceMockBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        deviceMockFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/DeviceMockWidgetDeviceMockFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        deviceMockCtaLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: ''
        deviceMockCtaUrl:
          type: string
          title: Button link
          description: Where the button goes — a path (/blog) or full URL.
          default: ''
        deviceMockCtaNewTab:
          type: boolean
          title: Open in new tab
          description: >-
            Opens the link in a new browser tab (adds rel="noopener
            noreferrer").
          default: false
        deviceMockCtaVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: solid
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        deviceMockCtaSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        deviceMockCtaRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        deviceMockCtaColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        deviceMockCtaColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        deviceMockCtaTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        deviceMockCtaTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        deviceMockCtaHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        deviceMockCtaHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        deviceMockCtaStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        deviceMockCtaShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        deviceMockCtaShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        deviceMockCtaAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        deviceMockCtaIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: arrow-right
        deviceMockCtaIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        deviceMockCtaIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: after
          enum:
            - before
            - after
            - null
        deviceMockCtaIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `device-mock` widget: its `type` and its own fields. A field left out
        takes its default.
      additionalProperties: true
    FaqWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - faq
          description: 'The widget’s type: always `faq`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        faqEyebrow:
          type: string
          title: Eyebrow
          description: Small label shown above the title.
          default: FAQ
        faqEyebrowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the eyebrow + its dash. Leave empty to use the
            secondary (mint) color.
          title: Eyebrow color (dark theme)
        faqEyebrowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the mint default.
          title: Eyebrow color (light theme)
        faqEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        faqEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        faqHeading:
          type: string
          title: Heading
          description: Optional. Leave empty to show just the questions.
          default: Frequently asked questions
        faqHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Heading color (dark theme)
        faqHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Heading color (light theme)
        faqHeadingWeight:
          type:
            - string
            - 'null'
          title: Heading weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Heading weight.
        faqIntro:
          type: string
          title: Intro line
          description: Optional short sentence under the heading.
          default: ''
        faqIntroColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Intro color (dark theme)
        faqIntroColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Intro color (light theme)
        faqIntroWeight:
          type:
            - string
            - 'null'
          title: Intro weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Intro weight.
        faqIntroSize:
          type:
            - string
            - 'null'
          title: Intro size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Intro size.
        faqAlign:
          type:
            - string
            - 'null'
          title: Header alignment
          description: The Split layout always sets its header column left.
          default: center
          enum:
            - center
            - left
            - null
        faqFeaturedOnly:
          type: boolean
          title: Featured questions only
          description: >-
            Show only questions you have flagged “Featured” in the FAQs manager
            — e.g. a short top-questions block on the home page, linking out to
            the full FAQ page.
          default: false
        faqCount:
          type:
            - integer
            - 'null'
          title: Maximum questions
          description: >-
            The most questions to show, in the manager’s sort order. Raise it
            for a full FAQ page.
          default: 12
          minimum: 1
          maximum: 50
          x-fetchski-clamped: true
        _faqCategories:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Only these categories
          description: >-
            Optional filter. Leave empty to show questions from every category.
            Manage the list under FAQ Categories. The related `faq-category`
            documents, in order (empty when none). To set it, send a list of `{
            "_id": "…" }`, one per document; a document the site can’t find is
            left out.
        faqGroupBy:
          type:
            - string
            - 'null'
          title: Group questions
          description: >-
            By category renders a subheading per FAQ category, in the order
            picked in the category filter (or, with no filter, the FAQ
            Categories sort order); questions without a category are listed
            last.
          default: none
          enum:
            - none
            - category
            - null
        faqLayout:
          type:
            - string
            - 'null'
          title: Section layout
          description: >-
            Accordion: a single centered column of collapsing questions — the
            classic FAQ. Split: the header (and button) sit in a left column
            with the accordion beside them. Two columns: the accordion flows
            across two columns. Open panels: every answer visible in a card grid
            — no collapsing.
          default: accordion
          enum:
            - accordion
            - split
            - columns
            - panels
            - null
        faqPanelColumns:
          type:
            - string
            - 'null'
          title: Panel columns
          description: How many open panels sit per row (they stack on small screens).
          default: '2'
          enum:
            - '1'
            - '2'
            - '3'
            - null
        faqOpenMode:
          type:
            - string
            - 'null'
          title: Opening behavior
          description: >-
            One at a time closes the previous answer when a new one opens;
            Independent lets visitors hold several open.
          default: single
          enum:
            - single
            - multiple
            - null
        faqFirstOpen:
          type: boolean
          title: Open the first question initially
          description: >-
            Starts the section with the first answer expanded so the block never
            reads as an empty list of rows.
          default: false
        faqMarker:
          type:
            - string
            - 'null'
          title: Toggle icon
          description: >-
            The disclosure marker on each question. Plus rotates into a close
            mark; Chevron flips.
          default: plus
          enum:
            - plus
            - chevron
            - null
        faqGap:
          type:
            - string
            - 'null'
          title: Space between questions
          default: normal
          enum:
            - tight
            - normal
            - roomy
            - null
          description: Space between questions.
        faqSchema:
          type: boolean
          title: Publish FAQ structured data (JSON-LD)
          description: >-
            Adds this section’s questions to the page’s schema.org FAQPage
            markup so search engines can read them (all FAQ sections on a page
            share one FAQPage block). Costs nothing when on; turn off only to
            exclude these questions.
          default: true
        faqCardStyle:
          type:
            - string
            - 'null'
          title: Card style
          description: >-
            The question-row treatment. Plain (the default) is the classic
            divided list — hairlines between questions. Any other style turns
            each question into a card: Raised is a quiet lit card, Outline a
            framed row, Luxe frosted glass; Ticket/Bracket/Inlay are the graphic
            showstoppers.
          default: plain
          enum:
            - raised
            - luxe
            - outline
            - plain
            - poster
            - edge
            - tint
            - ticket
            - bracket
            - forge
            - press
            - inlay
            - null
        faqCardStyleRadius:
          type:
            - string
            - 'null'
          title: Card corners
          description: >-
            Corner rounding for each card. Default keeps the widget’s own tuned
            corners — except Forge, which defaults to tight machined corners
            matching its engraved frame.
          default: default
          enum:
            - default
            - square
            - slight
            - rounded
            - large
            - null
        faqCardStyleAccentColor:
          type:
            - string
            - 'null'
          description: >-
            Colors the Spine rail, Bracket marks, Forge corner/frame and Press
            margin rule. Leave empty to use the brand accent.
          title: Card style color (dark theme)
        faqCardStyleAccentColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Card style color (light theme)
        faqCardStyleForgeScope:
          type:
            - string
            - 'null'
          title: Forge color placement
          description: >-
            Where the Forge plate wears its color: a single corner mark (the
            machinist’s datum, default) or the whole engraved frame.
          default: corner
          enum:
            - corner
            - frame
            - null
        faqCardStyleForgeWeight:
          type:
            - string
            - 'null'
          title: Forge line weight
          description: Thickness of the Forge corner mark / colored frame.
          default: fine
          enum:
            - fine
            - medium
            - bold
            - null
        faqCardHover:
          type:
            - string
            - 'null'
          title: Hover effect
          description: >-
            What a question row does on hover. None (the default) keeps the
            accordion calm — the open/close motion is the interaction. The card
            effects (Lift/Glow/…) suit the card styles; the cursor-tracked ones
            need site animations on.
          default: none
          enum:
            - none
            - lift
            - pop
            - press
            - glow
            - border
            - sheen
            - tilt
            - magnetic
            - spotlight
            - null
        faqAccentColor:
          type:
            - string
            - 'null'
          description: >-
            Optional — colors the toggle icon and the open question’s highlight.
            Leave empty to use the brand accent.
          title: Accent (dark theme)
        faqAccentColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Accent (light theme)
        faqQuestionSize:
          type:
            - string
            - 'null'
          title: Question size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Question size.
        faqQuestionWeight:
          type:
            - string
            - 'null'
          title: Question weight
          default: semibold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Question weight.
        faqQuestionColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Question color (dark theme)
        faqQuestionColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Question color (light theme)
        faqAnswerSize:
          type:
            - string
            - 'null'
          title: Answer size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Answer size.
        faqAnswerWeight:
          type:
            - string
            - 'null'
          title: Answer weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Answer weight.
        faqAnswerColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Answer color (dark theme)
        faqAnswerColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Answer color (light theme)
        faqGroupHeadingWeight:
          type:
            - string
            - 'null'
          title: Category heading weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Category heading weight.
        faqGroupHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Category heading color (dark theme)
        faqGroupHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Category heading color (light theme)
        faqBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        faqBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        faqBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        faqBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        faqFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/FaqWidgetFaqFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        faqCtaLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: ''
        faqCtaUrl:
          type: string
          title: Button link
          description: Where the button goes — a path (/blog) or full URL.
          default: ''
        faqCtaNewTab:
          type: boolean
          title: Open in new tab
          description: >-
            Opens the link in a new browser tab (adds rel="noopener
            noreferrer").
          default: false
        faqCtaVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: outline
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        faqCtaSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        faqCtaRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        faqCtaColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        faqCtaColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        faqCtaTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        faqCtaTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        faqCtaHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        faqCtaHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        faqCtaStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        faqCtaShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        faqCtaShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        faqCtaAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        faqCtaIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: arrow-right
        faqCtaIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        faqCtaIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: after
          enum:
            - before
            - after
            - null
        faqCtaIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `faq` widget: its `type` and its own fields. A field left out takes
        its default.
      additionalProperties: true
    LogosWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - logos
          description: 'The widget’s type: always `logos`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        logosEyebrowEnabled:
          type: boolean
          title: Show eyebrow
          description: A small label above the heading (e.g. "Trusted by").
          default: true
        logosEyebrow:
          type: string
          title: Eyebrow
          default: Trusted by
          description: Eyebrow.
        logosEyebrowColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the secondary (mint) color.
          title: Eyebrow color (dark theme)
        logosEyebrowColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Eyebrow color (light theme)
        logosEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        logosEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        logosHeading:
          type: string
          title: Heading
          description: Optional. Leave empty to show just the logos.
          default: In good company
        logosHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Heading color (dark theme)
        logosHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Heading color (light theme)
        logosHeadingWeight:
          type:
            - string
            - 'null'
          title: Heading weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Heading weight.
        logosIntro:
          type: string
          title: Intro line
          description: Optional short sentence under the heading.
          default: ''
        logosIntroColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Intro color (dark theme)
        logosIntroColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Intro color (light theme)
        logosIntroWeight:
          type:
            - string
            - 'null'
          title: Intro weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Intro weight.
        logosDisplay:
          type:
            - string
            - 'null'
          title: Display
          description: A slow scrolling ribbon (marquee) or a calm static grid.
          default: marquee
          enum:
            - marquee
            - grid
            - null
        logosSpeed:
          type:
            - string
            - 'null'
          title: Marquee speed
          default: normal
          enum:
            - slow
            - normal
            - fast
            - null
          description: Marquee speed.
        logosDirection:
          type:
            - string
            - 'null'
          title: Marquee direction
          default: left
          enum:
            - left
            - right
            - null
          description: Marquee direction.
        logosMotionPause:
          type: boolean
          title: Show pause button on background motion
          description: >-
            Adds a small, unobtrusive pause/play control so visitors can stop
            the auto-playing background motion (WCAG 2.2.2). Only appears when a
            moving background is set.
          default: false
        logosColumns:
          type:
            - string
            - 'null'
          title: Logos per row
          description: >-
            Auto fits as many as comfortably fit and works for any number of
            logos. Or lock a maximum per row.
          default: auto
          enum:
            - auto
            - '3'
            - '4'
            - '5'
            - '6'
            - null
        logosGap:
          type:
            - string
            - 'null'
          title: Gap between logos
          default: normal
          enum:
            - tight
            - normal
            - roomy
            - null
          description: Gap between logos.
        logosSize:
          type:
            - string
            - 'null'
          title: Logo size
          description: >-
            The height each logo is scaled to (width follows the logo’s aspect
            ratio).
          default: medium
          enum:
            - small
            - medium
            - large
            - null
        logosAlign:
          type:
            - string
            - 'null'
          title: Header alignment
          description: >-
            Aligns the eyebrow / heading / intro (and the grid when there are
            few logos).
          default: center
          enum:
            - center
            - left
            - null
        logosTile:
          type: boolean
          title: Show each logo on a tile
          description: >-
            Sets every logo on a raised, bordered card. Off = logos sit straight
            on the background.
          default: false
        logosGrayscale:
          type: boolean
          title: Grayscale until hover
          description: >-
            Mutes the logos to grayscale and dims them, returning to full color
            on hover — the classic logo-wall look.
          default: true
        logos:
          type: array
          items:
            $ref: '#/components/schemas/LogosWidgetLogosItem'
          title: Logos
          default: []
          description: Logos.
        logosBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        logosBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        logosBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        logosBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        logosFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/LogosWidgetLogosFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        logosCtaLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: ''
        logosCtaUrl:
          type: string
          title: Button link
          description: Where the button goes — a path (/blog) or full URL.
          default: ''
        logosCtaNewTab:
          type: boolean
          title: Open in new tab
          description: >-
            Opens the link in a new browser tab (adds rel="noopener
            noreferrer").
          default: false
        logosCtaVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: outline
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        logosCtaSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        logosCtaRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        logosCtaColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        logosCtaColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        logosCtaTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        logosCtaTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        logosCtaHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        logosCtaHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        logosCtaStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        logosCtaShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        logosCtaShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        logosCtaAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        logosCtaIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: arrow-right
        logosCtaIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        logosCtaIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: after
          enum:
            - before
            - after
            - null
        logosCtaIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `logos` widget: its `type` and its own fields. A field left out takes
        its default.
      additionalProperties: true
    TeamWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - team
          description: 'The widget’s type: always `team`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        teamEyebrow:
          type: string
          title: Eyebrow
          description: Small label shown above the title.
          default: Our team
        teamEyebrowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the eyebrow + its dash. Leave empty to use the
            secondary (mint) color.
          title: Eyebrow color (dark theme)
        teamEyebrowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the mint default.
          title: Eyebrow color (light theme)
        teamEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        teamEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        teamHeading:
          type: string
          title: Heading
          description: Optional. Leave empty to show just the team.
          default: Meet the team
        teamHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Heading color (dark theme)
        teamHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Heading color (light theme)
        teamHeadingWeight:
          type:
            - string
            - 'null'
          title: Heading weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Heading weight.
        teamIntro:
          type: string
          title: Intro line
          description: Optional short sentence under the heading.
          default: ''
        teamIntroColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Intro color (dark theme)
        teamIntroColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Intro color (light theme)
        teamIntroWeight:
          type:
            - string
            - 'null'
          title: Intro weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Intro weight.
        teamIntroSize:
          type:
            - string
            - 'null'
          title: Intro size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Intro size.
        teamAlign:
          type:
            - string
            - 'null'
          title: Header alignment
          default: center
          enum:
            - center
            - left
            - null
          description: Header alignment.
        teamFeaturedOnly:
          type: boolean
          title: Featured members only
          description: >-
            Show only members you have flagged “Featured” in the Team Members
            manager — e.g. a short leadership row on the home page.
          default: false
        teamCount:
          type:
            - integer
            - 'null'
          title: Maximum members
          description: The most members to show, in the manager’s sort order.
          default: 12
          minimum: 1
          maximum: 50
          x-fetchski-clamped: true
        teamLayout:
          type:
            - string
            - 'null'
          title: Section layout
          description: >-
            Grid: a tidy multi-row grid (the full team page). Carousel: a
            continuous auto-scrolling marquee (needs site animations enabled —
            falls back to the grid when they are off). Spotlight: featured
            members large on top, the rest in a smaller grid. List: wide rows
            with the full bio. Scatter: a playful arrangement with varied
            spacing so the cards float freely.
          default: grid
          enum:
            - grid
            - carousel
            - spotlight
            - list
            - scatter
            - null
        teamColumns:
          type:
            - string
            - 'null'
          title: Columns
          description: >-
            How many cards per row. Auto fits as many as comfortably fit (the
            Scatter layout composes on three columns when set to Auto).
          default: auto
          enum:
            - auto
            - '2'
            - '3'
            - '4'
            - null
        teamSpotlightHeroes:
          type:
            - string
            - 'null'
          title: Featured spots (top row)
          description: >-
            How many members lead the section at full size. Members flagged
            “Featured” fill the spots first, in the manager’s sort order; any
            extra featured members join the rows below.
          default: '2'
          enum:
            - '1'
            - '2'
            - null
        teamSpotlightColumns:
          type:
            - string
            - 'null'
          title: Cards per row (below)
          description: >-
            How many of the remaining members sit on each row under the featured
            spots.
          default: '3'
          enum:
            - '2'
            - '3'
            - '4'
            - '5'
            - null
        teamSpeed:
          type:
            - string
            - 'null'
          title: Scroll speed
          description: How fast the carousel auto-scrolls.
          default: normal
          enum:
            - vslow
            - slow
            - normal
            - fast
            - null
        teamDirection:
          type:
            - string
            - 'null'
          title: Scroll direction
          default: left
          enum:
            - left
            - right
            - null
          description: Scroll direction.
        teamScatter:
          type:
            - string
            - 'null'
          title: Scatter amount
          description: >-
            How far the cards drift from a tidy grid. Subtle keeps a loose grid;
            Wild pushes the offsets to their playful maximum.
          default: playful
          enum:
            - subtle
            - playful
            - wild
            - null
        teamGap:
          type:
            - string
            - 'null'
          title: Gap between cards
          default: normal
          enum:
            - tight
            - normal
            - roomy
            - null
          description: Gap between cards.
        teamCardLayout:
          type:
            - string
            - 'null'
          title: Card layout
          description: >-
            Portrait: the photo on top, name/role/bio below — the classic team
            card. Overlay: a full-bleed photo with a solid color panel over its
            lower edge holding the name and role. Profile: a horizontal bar —
            avatar left, name/role/tagline right. Roster: minimal — just the
            avatar, name and role. (The List section layout always uses its own
            wide row.)
          default: portrait
          enum:
            - portrait
            - overlay
            - profile
            - roster
            - null
        teamPhotoAspect:
          type:
            - string
            - 'null'
          title: Photo shape
          description: The photo’s aspect ratio on the photo-led card layouts.
          default: portrait
          enum:
            - square
            - portrait
            - tall
            - null
        teamAvatarShape:
          type:
            - string
            - 'null'
          title: Avatar shape
          description: >-
            The photo’s outline. Squircle is a soft superellipse-style corner
            (approximated with heavy rounding).
          default: circle
          enum:
            - circle
            - rounded
            - squircle
            - square
            - null
        teamAvatarSize:
          type:
            - string
            - 'null'
          title: Avatar size
          default: large
          enum:
            - small
            - medium
            - large
            - xlarge
            - null
          description: Avatar size.
        teamAvatarBorder:
          type:
            - string
            - 'null'
          title: Avatar border
          description: A ring around the photo in the avatar color.
          default: none
          enum:
            - none
            - hairline
            - thin
            - bold
            - null
        teamAvatarTreatment:
          type:
            - string
            - 'null'
          title: Avatar backdrop
          description: >-
            A flat color accent behind the photo. Panel offsets a solid block
            behind it; Halo draws a soft concentric disc. Both use the avatar
            color.
          default: none
          enum:
            - none
            - panel
            - halo
            - null
        teamAvatarColor:
          type:
            - string
            - 'null'
          description: >-
            Colors the border and the backdrop treatment. Leave empty to use the
            brand accent.
          title: Avatar color (dark theme)
        teamAvatarColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Avatar color (light theme)
        teamShowRole:
          type: boolean
          title: Show role / title
          default: true
          description: Show role / title.
        teamShowBio:
          type: boolean
          title: Show bio
          description: >-
            Shown on the Portrait and Profile cards and the List rows. The
            Overlay and Roster layouts stay bio-free by design.
          default: true
        teamShowTagline:
          type: boolean
          title: Show tagline / fun fact
          description: >-
            The member’s one-liner, shown on the Profile and Roster cards and
            the List rows.
          default: true
        teamHoverPhoto:
          type: boolean
          title: Swap to the alternate photo on hover
          description: >-
            Cross-fades to a member’s alternate photo on hover (set per member;
            does nothing for members without one, and stays off for visitors who
            prefer reduced motion).
          default: true
        teamCardStyle:
          type:
            - string
            - 'null'
          title: Card style
          description: >-
            The card treatment. Outline (the default) is a plaque frame — a
            framed-portrait look; Raised is a quiet lit card; Luxe a frosted
            glass panel; Ticket/Bracket/Inlay are the graphic showstoppers.
          default: outline
          enum:
            - raised
            - luxe
            - outline
            - plain
            - poster
            - edge
            - tint
            - ticket
            - bracket
            - inlay
            - null
        teamCardStyleRadius:
          type:
            - string
            - 'null'
          title: Card corners
          description: >-
            Corner rounding for each card. Default keeps the widget’s own tuned
            corners — except Forge, which defaults to tight machined corners
            matching its engraved frame.
          default: default
          enum:
            - default
            - square
            - slight
            - rounded
            - large
            - null
        teamCardStyleAccentColor:
          type:
            - string
            - 'null'
          description: >-
            Colors the Spine rail, Bracket marks, Forge corner/frame and Press
            margin rule. Leave empty to use the brand accent.
          title: Card style color (dark theme)
        teamCardStyleAccentColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Card style color (light theme)
        teamCardHover:
          type:
            - string
            - 'null'
          title: Hover effect
          description: >-
            What a card does on hover. Lift/Pop/Press/Glow/Outline are instant;
            Sheen sweeps a light across; Tilt, Magnetic and Spotlight follow the
            cursor (need site animations on). Vary it per section so the page is
            not cookie-cutter.
          default: glow
          enum:
            - none
            - lift
            - pop
            - press
            - glow
            - border
            - sheen
            - tilt
            - magnetic
            - spotlight
            - null
        teamCardAlign:
          type:
            - string
            - 'null'
          title: Card content alignment
          description: >-
            How the name, role and bio align inside each card (the Profile card
            and List rows are always left-aligned beside the avatar).
          default: center
          enum:
            - center
            - left
            - null
        teamAccentColor:
          type:
            - string
            - 'null'
          description: >-
            Optional — the lettered-avatar fallback background and the role
            color default. Leave empty to use the brand accent. (The icon row
            has its own colors on the Social links tab.)
          title: Accent (dark theme)
        teamAccentColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Accent (light theme)
        teamPanelColor:
          type:
            - string
            - 'null'
          description: >-
            The solid panel over the photo on the Overlay card. Leave empty to
            use the card color.
          title: Overlay panel color (dark theme)
        teamPanelColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Overlay panel color (light theme)
        teamNameSize:
          type:
            - string
            - 'null'
          title: Name size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Name size.
        teamNameWeight:
          type:
            - string
            - 'null'
          title: Name weight
          default: semibold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Name weight.
        teamNameColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Name color (dark theme)
        teamNameColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Name color (light theme)
        teamRoleSize:
          type:
            - string
            - 'null'
          title: Role size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Role size.
        teamRoleWeight:
          type:
            - string
            - 'null'
          title: Role weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Role weight.
        teamRoleColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the accent color.
          title: Role color (dark theme)
        teamRoleColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Role color (light theme)
        teamBioSize:
          type:
            - string
            - 'null'
          title: Bio size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Bio size.
        teamBioWeight:
          type:
            - string
            - 'null'
          title: Bio weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Bio weight.
        teamBioColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Bio color (dark theme)
        teamBioColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Bio color (light theme)
        teamBioClamp:
          type:
            - string
            - 'null'
          title: Bio length
          description: >-
            Cap each bio at this many lines (the rest is truncated with an
            ellipsis) so one long bio can’t blow up the card height. The List
            layout always shows the full bio.
          default: '4'
          enum:
            - none
            - '2'
            - '3'
            - '4'
            - '6'
            - null
        teamTaglineColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the faint text color.
          title: Tagline color (dark theme)
        teamTaglineColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Tagline color (light theme)
        teamShowSocials:
          type: boolean
          title: Show social profiles
          description: >-
            The member’s social profile icons (set per member in the Team
            Members manager).
          default: true
        teamShowContact:
          type: boolean
          title: Show email / phone
          description: >-
            Off by default — turns each member’s email and phone (when set) into
            icon links. Only enable when you want those details public.
          default: false
        teamSocialVariant:
          type:
            - string
            - 'null'
          title: Icon style
          default: bare
          enum:
            - bare
            - outline
            - solid
            - null
          description: Icon style.
        teamSocialSize:
          type:
            - string
            - 'null'
          title: Icon size
          default: small
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Icon size.
        teamSocialSpacing:
          type:
            - string
            - 'null'
          title: Icon spacing
          description: Gap between the icons.
          default: tight
          enum:
            - tight
            - normal
            - loose
            - null
        teamSocialHover:
          type:
            - string
            - 'null'
          title: Hover color
          description: >-
            Hover to each platform’s own brand color, or to the site accent (or
            a chosen hover color).
          default: brand
          enum:
            - brand
            - accent
            - null
        teamSocialColor:
          type:
            - string
            - 'null'
          description: Resting icon color. Leave empty for the muted default.
          title: Icon color (dark theme)
        teamSocialColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the muted default.
          title: Icon color (light theme)
        teamSocialHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Used when “Hover color” is Accent / custom. Leave empty for the site
            accent.
          title: Hover color (dark theme)
        teamSocialHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the accent.
          title: Hover color (light theme)
        teamBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        teamBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        teamBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        teamBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        teamFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/TeamWidgetTeamFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        teamCtaLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: ''
        teamCtaUrl:
          type: string
          title: Button link
          description: Where the button goes — a path (/blog) or full URL.
          default: ''
        teamCtaNewTab:
          type: boolean
          title: Open in new tab
          description: >-
            Opens the link in a new browser tab (adds rel="noopener
            noreferrer").
          default: false
        teamCtaVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: outline
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        teamCtaSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        teamCtaRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        teamCtaColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        teamCtaColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        teamCtaTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        teamCtaTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        teamCtaHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        teamCtaHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        teamCtaStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        teamCtaShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        teamCtaShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        teamCtaAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        teamCtaIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: arrow-right
        teamCtaIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        teamCtaIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: after
          enum:
            - before
            - after
            - null
        teamCtaIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `team` widget: its `type` and its own fields. A field left out takes
        its default.
      additionalProperties: true
    ServiceMapWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - service-map
          description: 'The widget’s type: always `service-map`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        serviceMapEyebrow:
          type: string
          title: Eyebrow
          description: Small label shown above the title.
          default: Coverage
        serviceMapEyebrowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the eyebrow + its dash. Leave empty to use the
            secondary (mint) color.
          title: Eyebrow color (dark theme)
        serviceMapEyebrowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the mint default.
          title: Eyebrow color (light theme)
        serviceMapEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        serviceMapEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        serviceMapHeading:
          type: string
          title: Heading
          default: Where we serve
          description: Heading.
        serviceMapHeadingColor:
          type:
            - string
            - 'null'
          description: Optional. Leave empty for the standard ink color.
          title: Heading color (dark theme)
        serviceMapHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Heading color (light theme)
        serviceMapHeadingWeight:
          type:
            - string
            - 'null'
          title: Heading weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Heading weight.
        serviceMapIntro:
          type: string
          title: Intro text
          description: >-
            Optional short paragraph under the heading. The data source’s own
            description (service days etc.) shows in the result panel, not here.
          default: ''
        serviceMapIntroSize:
          type:
            - string
            - 'null'
          title: Intro size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Intro size.
        serviceMapHeight:
          type:
            - string
            - 'null'
          title: Map height
          default: standard
          enum:
            - compact
            - standard
            - tall
            - null
          description: Map height.
        serviceMapTheme:
          type:
            - string
            - 'null'
          title: Map theme
          description: >-
            Curated light/dark basemap pairs — each follows the visitor’s theme
            toggle. “Site palette” derives the basemap from this site’s own
            colors.
          default: palette
          enum:
            - palette
            - classic
            - silver
            - retro
            - null
        serviceMapFrameRadius:
          type:
            - string
            - 'null'
          title: Map corner radius
          default: rounded
          enum:
            - square
            - slight
            - rounded
            - large
            - null
          description: Map corner radius.
        serviceMapFrameBorderColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Leave empty for the standard hairline — set it to match a
            colored border on the zone cards.
          title: Map border color (dark theme)
        serviceMapFrameBorderColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Map border color (light theme)
        serviceMapFrameGlowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional soft glow around the map frame — pairs with a glowing
            zone-card style. Leave empty for none.
          title: Map glow color (dark theme)
        serviceMapFrameGlowColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Map glow color (light theme)
        serviceMapSchema:
          type: boolean
          title: Publish full service-area structured data (JSON-LD)
          description: >-
            On pages with this section, upgrades the business structured data
            from the compact site-wide form to the full detail: every public
            place name, every zip code, and area boundaries. Costs visitors
            nothing; turn off to keep this page at the compact site-wide form.
            (Requires structured data on in Site settings → SEO; demo map data
            is never published.)
          default: true
        serviceMapShowLegend:
          type: boolean
          title: Show the map key
          description: >-
            The legend card overlaid on the map. The zone cards below the map
            always carry the same information for screen readers and when the
            map can’t load.
          default: true
        serviceMapKeySwatchSize:
          type:
            - string
            - 'null'
          title: Key swatch size
          default: medium
          enum:
            - small
            - medium
            - large
            - null
          description: Key swatch size.
        serviceMapKeyJustify:
          type:
            - string
            - 'null'
          title: Key text justification
          default: left
          enum:
            - left
            - center
            - right
            - null
          description: Key text justification.
        serviceMapKeyTextSize:
          type:
            - string
            - 'null'
          title: Key text size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Key text size.
        serviceMapKeyTextWeight:
          type:
            - string
            - 'null'
          title: Key text weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Key text weight.
        serviceMapKeyTextColor:
          type:
            - string
            - 'null'
          description: Optional. Leave empty for the standard ink color.
          title: Key text color (dark theme)
        serviceMapKeyTextColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Key text color (light theme)
        serviceMapKeyRadius:
          type:
            - string
            - 'null'
          title: Key corner radius
          default: rounded
          enum:
            - square
            - slight
            - rounded
            - large
            - null
          description: Key corner radius.
        serviceMapKeyBorderColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Leave empty for the standard hairline — set it to match
            the map frame or the zone cards.
          title: Key border color (dark theme)
        serviceMapKeyBorderColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Key border color (light theme)
        serviceMapKeyGlowColor:
          type:
            - string
            - 'null'
          description: Optional soft glow around the key card. Leave empty for none.
          title: Key glow color (dark theme)
        serviceMapKeyGlowColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Key glow color (light theme)
        serviceMapShowCards:
          type: boolean
          title: Show the zone cards
          description: >-
            The zone/pricing cards under the map. Turning this off hides them
            visually — they stay in the page for screen readers and
            no-JavaScript visitors (the map itself isn’t accessible).
          default: true
        serviceMapCardStyle:
          type:
            - string
            - 'null'
          title: Card style
          description: >-
            The card surface. Raised is a quiet lit card; Luxe is a frosted
            glass panel; Outline is a double-rule plaque frame; Plain has no
            chrome; Poster frames the card with an accent keyline; Spine embeds
            a color rail along the top; Tint washes the card in the accent
            color. Showstoppers: Ticket punches notches into the sides, Bracket
            draws only corner marks, Forge is a machined plate with an engraved
            frame, Press is a punched index card with a margin rule, Inlay
            recesses the content into a well.
          default: raised
          enum:
            - raised
            - luxe
            - outline
            - plain
            - poster
            - edge
            - tint
            - inlay
            - null
        serviceMapCardStyleRadius:
          type:
            - string
            - 'null'
          title: Card corners
          description: >-
            Corner rounding for each card. Default keeps the widget’s own tuned
            corners — except Forge, which defaults to tight machined corners
            matching its engraved frame.
          default: default
          enum:
            - default
            - square
            - slight
            - rounded
            - large
            - null
        serviceMapCardStyleAccentColor:
          type:
            - string
            - 'null'
          description: >-
            Colors the Spine rail, Bracket marks, Forge corner/frame and Press
            margin rule. Leave empty to use the brand accent.
          title: Card style color (dark theme)
        serviceMapCardStyleAccentColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Card style color (light theme)
        serviceMapCardsHover:
          type:
            - string
            - 'null'
          title: Hover effect
          description: >-
            What a card does on hover. Lift/Pop/Press/Glow/Outline are instant
            CSS effects; Sheen sweeps a soft light across; Tilt, Magnetic and
            Spotlight follow the cursor (these need site animations on —
            visitors who prefer reduced motion see the resting card). Pick a
            different one per section so a page feels varied, not cookie-cutter.
          default: border
          enum:
            - none
            - lift
            - pop
            - press
            - glow
            - border
            - sheen
            - tilt
            - magnetic
            - spotlight
            - null
        serviceMapCardsSwatchSize:
          type:
            - string
            - 'null'
          title: Card swatch size
          default: medium
          enum:
            - small
            - medium
            - large
            - null
          description: Card swatch size.
        serviceMapCardsJustify:
          type:
            - string
            - 'null'
          title: Card text justification
          default: left
          enum:
            - left
            - center
            - right
            - null
          description: Card text justification.
        serviceMapCardsNameWeight:
          type:
            - string
            - 'null'
          title: Zone name weight
          default: semibold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Zone name weight.
        serviceMapCardsTextSize:
          type:
            - string
            - 'null'
          title: Card text size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Card text size.
        serviceMapCardsTextColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Colors the zone names; supporting copy stays muted. Leave
            empty for the standard ink color.
          title: Card text color (dark theme)
        serviceMapCardsTextColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Card text color (light theme)
        serviceMapCardsSubSize:
          type:
            - string
            - 'null'
          title: Supporting text size
          description: >-
            The price and detail lines under each zone name — sized relative to
            the card text size.
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
        serviceMapCardsSubWeight:
          type:
            - string
            - 'null'
          title: Supporting text weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Supporting text weight.
        serviceMapCardsSubColor:
          type:
            - string
            - 'null'
          description: Optional. Leave empty for the standard muted color.
          title: Supporting text color (dark theme)
        serviceMapCardsSubColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Supporting text color (light theme)
        serviceMapIncludedLabel:
          type: string
          title: Label for zero-price zones
          description: >-
            Optional label shown instead of “$0” wherever a zone has no fee
            (key, cards, results). Clear it to show the plain price — $0 doesn’t
            always mean included.
          default: Included
        serviceMapZoneOverrides:
          type: array
          items:
            $ref: '#/components/schemas/ServiceMapWidgetServiceMapZoneOverridesItem'
          title: Zone label overrides
          description: >-
            Per-zone display overrides, matched by the zone name the data source
            provides. Rename a zone, replace its price text, or hide it entirely
            — the underlying data is never changed.
          default: []
        serviceMapShowSearch:
          type: boolean
          title: Show the “check your area” search
          default: true
          description: Show the “check your area” search.
        serviceMapSearchLabel:
          type: string
          title: Search label
          default: Check your area
          description: Search label.
        serviceMapSearchPlaceholder:
          type: string
          title: Search placeholder
          default: ZIP code or address
          description: Search placeholder.
        serviceMapSearchJustify:
          type:
            - string
            - 'null'
          title: Search justification
          description: Positions the search box and button above the map.
          default: left
          enum:
            - left
            - center
            - right
            - null
        serviceMapSearchInputRadius:
          type:
            - string
            - 'null'
          title: Search box corner radius
          description: Same radius scale as the buttons, so the box and button can match.
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
        serviceMapAutocomplete:
          type: boolean
          title: Suggest addresses while typing
          description: >-
            Google address autocomplete under the search box (needs the Places
            API enabled on the key — see the setup guide in Connections → Google
            Maps). ZIP-only typing never triggers suggestions when the data
            source is zip-based.
          default: true
        serviceMapOutsideAreaText:
          type: string
          title: Outside-area message
          description: >-
            Shown when a searched location doesn’t fall in any zone (or the
            premium radius).
          default: That location is outside our mapped service area.
        serviceMapSearchButtonText:
          type: string
          title: Search button label
          description: >-
            Leave empty for “Check”. The button’s look is configured in the
            Search button tab.
          default: ''
        serviceMapSearchButtonVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: solid
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        serviceMapSearchButtonSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        serviceMapSearchButtonRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        serviceMapSearchButtonColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        serviceMapSearchButtonColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        serviceMapSearchButtonTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        serviceMapSearchButtonTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        serviceMapSearchButtonHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        serviceMapSearchButtonHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        serviceMapSearchButtonStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        serviceMapSearchButtonShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        serviceMapSearchButtonShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        serviceMapSearchButtonAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        serviceMapPanelPlacement:
          type:
            - string
            - 'null'
          title: Popup placement
          default: center
          enum:
            - center
            - corner
            - null
          description: Popup placement.
        serviceMapPanelLook:
          type:
            - string
            - 'null'
          title: Popup style
          default: overlay
          enum:
            - overlay
            - solid
            - null
          description: Popup style.
        serviceMapPanelShowQuery:
          type: boolean
          title: Show what was searched
          description: >-
            Repeats the searched ZIP code or address at the top of the result
            popup.
          default: true
        serviceMapPanelShowCity:
          type: boolean
          title: Show the city/town name
          description: >-
            Looks up the locality for a searched ZIP code (one extra Geocoding
            API call per search) and shows it beside the searched value.
          default: false
        serviceMapPanelTextSize:
          type:
            - string
            - 'null'
          title: Popup text size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Popup text size.
        serviceMapPanelTitleWeight:
          type:
            - string
            - 'null'
          title: Popup title weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Popup title weight.
        serviceMapShowPremium:
          type: boolean
          title: Show premium service pricing
          description: >-
            When the data carries a premium (distance-priced) service, include
            it in search results and the zone cards. Sources without their own
            premium block use the pricing set in Service area map → Areas and
            pricing.
          default: true
        serviceMapShowPremiumRing:
          type: boolean
          title: Draw the premium radius on the map
          description: >-
            Needs a premium range limit (miles) — with no limit there is no ring
            to draw.
          default: false
        serviceMapPremiumEstimateNote:
          type: string
          title: Premium estimate note
          default: Estimate based on driving distance.
          description: Premium estimate note.
        serviceMapPremiumUnavailableText:
          type: string
          title: Premium fallback text
          description: >-
            Shown when a distance estimate isn’t possible (e.g. the Distance
            Matrix API isn’t enabled on the key).
          default: Contact us for a quote.
        _serviceMapMarkerImage:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Marker image (dark theme)
          description: >-
            Optional logo/pin image for the business marker. Leave empty for a
            simple accent-color pin. The related `@apostrophecms/image`
            documents, in order (empty when none). To set it, send a list of `{
            "_id": "…" }`, one per document (one at most); a document the site
            can’t find is left out.
          maxItems: 1
        _serviceMapMarkerImageLight:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Marker image (light theme)
          description: >-
            Optional light-theme variant. Falls back to the dark-theme image.
            The related `@apostrophecms/image` documents, in order (empty when
            none). To set it, send a list of `{ "_id": "…" }`, one per document
            (one at most); a document the site can’t find is left out.
          maxItems: 1
        serviceMapMarkerLabel:
          type: string
          title: Marker label
          description: >-
            Accessible name + hover title for the marker. Leave empty to use the
            business name from Site settings.
          default: ''
        serviceMapMarkerSize:
          type:
            - string
            - 'null'
          title: Marker size
          default: medium
          enum:
            - small
            - medium
            - large
            - null
          description: Marker size.
        serviceMapMarkerBounce:
          type: boolean
          title: Subtle marker bounce
          description: >-
            The business marker gently bobs in place. Automatically disabled for
            visitors who prefer reduced motion.
          default: false
        serviceMapShowLocation:
          type: boolean
          title: List the business location in the key and cards
          description: >-
            Adds the business location (named by its label in Service area map →
            Your location) as the FIRST entry of the map key and zone cards.
          default: true
        serviceMapBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        serviceMapBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        serviceMapBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        serviceMapBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        serviceMapFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/ServiceMapWidgetServiceMapFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `service-map` widget: its `type` and its own fields. A field left out
        takes its default.
      additionalProperties: true
    BlogPreviewWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - blog-preview
          description: 'The widget’s type: always `blog-preview`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        blogHeading:
          type: string
          title: Heading
          default: From the blog
          description: Heading.
        blogSubheading:
          type: string
          title: Subheading
          default: >-
            Product news, release notes, and tips for getting the most out of
            your site.
          description: Subheading.
        blogCardImageAspect:
          type:
            - string
            - 'null'
          title: Image shape
          description: >-
            Aspect ratio of the featured image. Choose “Hidden” for text-only
            cards.
          default: 16/10
          enum:
            - 16/10
            - 4/3
            - 3/2
            - 1/1
            - none
            - null
        blogCardImageHover:
          type:
            - string
            - 'null'
          title: Image hover
          default: zoom
          enum:
            - zoom
            - none
            - null
          description: Image hover.
        blogCardImageFill:
          type: boolean
          title: Image fills the card
          description: >-
            Use the featured image as the full card background, with the title
            and meta overlaid on a dark scrim. Posts with no image fall back to
            a normal card.
          default: false
        blogCardPreset:
          type:
            - string
            - 'null'
          title: Card style
          description: >-
            The card surface. Raised is a quiet lit card; Luxe a frosted glass
            panel; Outline a plaque frame; Spine adds a color rail; Tint an
            accent wash; Ticket/Bracket/Forge/Press/Inlay are the graphic
            showstoppers. (On image-led cards the photo covers the top edge.)
          default: raised
          enum:
            - raised
            - luxe
            - outline
            - plain
            - poster
            - edge
            - tint
            - ticket
            - bracket
            - forge
            - press
            - inlay
            - null
        blogCardPresetRadius:
          type:
            - string
            - 'null'
          title: Card corners
          description: >-
            Corner rounding for each card. Default keeps the widget’s own tuned
            corners — except Forge, which defaults to tight machined corners
            matching its engraved frame.
          default: default
          enum:
            - default
            - square
            - slight
            - rounded
            - large
            - null
        blogCardPresetAccentColor:
          type:
            - string
            - 'null'
          description: >-
            Colors the Spine rail, Bracket marks, Forge corner/frame and Press
            margin rule. Leave empty to use the brand accent.
          title: Card style color (dark theme)
        blogCardPresetAccentColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Card style color (light theme)
        blogCardPresetForgeScope:
          type:
            - string
            - 'null'
          title: Forge color placement
          description: >-
            Where the Forge plate wears its color: a single corner mark (the
            machinist’s datum, default) or the whole engraved frame.
          default: corner
          enum:
            - corner
            - frame
            - null
        blogCardPresetForgeWeight:
          type:
            - string
            - 'null'
          title: Forge line weight
          description: Thickness of the Forge corner mark / colored frame.
          default: fine
          enum:
            - fine
            - medium
            - bold
            - null
        blogCardHover:
          type:
            - string
            - 'null'
          title: Card hover effect
          description: >-
            What a card does on hover. Lift/Pop/Press/Glow/Outline are instant;
            Sheen sweeps a light across; Tilt (3-D + glare), Magnetic and
            Spotlight follow the cursor (need site animations on). The Hover
            color below tints these.
          default: pop
          enum:
            - none
            - lift
            - pop
            - press
            - glow
            - border
            - sheen
            - tilt
            - magnetic
            - spotlight
            - null
        blogCardHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Border / shadow / glow color on hover. Leave empty to use the site
            accent color.
          title: Hover accent color (dark theme)
        blogCardHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the accent.
          title: Hover accent color (light theme)
        blogCardShowCategory:
          type: boolean
          title: Show category
          default: true
          description: Show category.
        blogCardCategoryStyle:
          type:
            - string
            - 'null'
          title: Category badge style
          description: >-
            How the category badge uses its color (set per category under Blog
            Categories). Filled = colored background; Outline = colored border +
            text; Minimal = colored text only.
          default: filled
          enum:
            - filled
            - outline
            - minimal
            - null
        blogCardShowDate:
          type: boolean
          title: Show date
          default: true
          description: Show date.
        blogCardShowExcerpt:
          type: boolean
          title: Show excerpt
          default: true
          description: Show excerpt.
        blogCardExcerptLines:
          type:
            - string
            - 'null'
          title: Excerpt lines
          description: How many lines of the excerpt to show before truncating.
          default: '3'
          enum:
            - '2'
            - '3'
            - '4'
            - none
            - null
        blogCardShowAuthor:
          type: boolean
          title: Show author
          default: true
          description: Show author.
        blogCardShowReadMore:
          type: boolean
          title: Show “Read post” link
          default: true
          description: Show “Read post” link.
        blogCardReadMorePlacement:
          type:
            - string
            - 'null'
          title: “Read post” placement
          description: >-
            Auto puts it on the right of horizontal cards (list / compact /
            featured) and below the text on grid cards. Or force one placement
            everywhere.
          default: auto
          enum:
            - auto
            - below
            - right
            - null
        blogCardReadMoreColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the “Read post” link color. Leave empty to use
            the site accent color.
          title: “Read post” color (dark theme)
        blogCardReadMoreColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the accent.
          title: “Read post” color (light theme)
        blogCardReadMoreHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Color of the “Read post” link when the card is hovered.
            Leave empty to use the accent color.
          title: “Read post” hover color (dark theme)
        blogCardReadMoreHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color, then the accent.
          title: “Read post” hover color (light theme)
        blogCardTitleColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the card title color. Leave empty to track the
            theme’s text color.
          title: Title color (dark theme)
        blogCardTitleColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the theme default.
          title: Title color (light theme)
        blogCardTitleWeight:
          type:
            - string
            - 'null'
          title: Title weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Title weight.
        blogCardTitleHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Title color when the card is hovered. Leave empty to use
            the site accent color.
          title: Title hover color (dark theme)
        blogCardTitleHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color, then the accent.
          title: Title hover color (light theme)
        blogCardTextColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the excerpt text color. Leave empty for the
            muted default.
          title: Excerpt color (dark theme)
        blogCardTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the muted default.
          title: Excerpt color (light theme)
        blogCardTextWeight:
          type:
            - string
            - 'null'
          title: Excerpt weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - null
          description: Excerpt weight.
        blogCardMetaColor:
          type:
            - string
            - 'null'
          description: Date / meta line color. Leave empty for the faint default.
          title: Meta color (dark theme)
        blogCardMetaColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the faint default.
          title: Meta color (light theme)
        blogBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        blogBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        blogBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        blogBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        blogFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/BlogPreviewWidgetBlogFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        blogCtaLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: All posts
        blogCtaUrl:
          type: string
          title: Button link
          description: Where the button goes — a path (/blog) or full URL.
          default: /blog
        blogCtaNewTab:
          type: boolean
          title: Open in new tab
          description: >-
            Opens the link in a new browser tab (adds rel="noopener
            noreferrer").
          default: false
        blogCtaVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: outline
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        blogCtaSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        blogCtaRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        blogCtaColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        blogCtaColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        blogCtaTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        blogCtaTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        blogCtaHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        blogCtaHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        blogCtaStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        blogCtaShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        blogCtaShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        blogCtaAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        blogCtaIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: arrow-right
        blogCtaIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        blogCtaIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: after
          enum:
            - before
            - after
            - null
        blogCtaIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `blog-preview` widget: its `type` and its own fields. A field left out
        takes its default.
      additionalProperties: true
    CookieDeclarationWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - cookie-declaration
          description: 'The widget’s type: always `cookie-declaration`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        cookieDeclEyebrow:
          type: string
          title: Eyebrow
          default: ''
          description: Eyebrow.
        cookieDeclHeading:
          type: string
          title: Heading
          default: What we store on your device
          description: Heading.
        cookieDeclIntro:
          type: string
          title: Introduction
          default: >-
            Everything below is either set by this website or requested from
            another company on our behalf. Each entry says who receives it, what
            it is for, and how long it lasts.
          description: Introduction.
        cookieDeclShowStatus:
          type: boolean
          title: Show the visitor’s current choices
          description: >-
            A short block naming what this visitor has allowed, with a button
            that reopens the preferences panel. Withdrawal has to be as easy as
            consent, so leave this on unless the page offers another way.
          default: true
        cookieDeclShowTable:
          type: boolean
          title: Show the details table
          description: >-
            Provider, type, duration and domain per entry. Off leaves the
            plain-language disclosures alone, which reads better but tells a
            technical reader less.
          default: true
        cookieDeclLayout:
          type:
            - string
            - 'null'
          title: Layout
          default: stacked
          enum:
            - stacked
            - compact
            - null
          description: Layout.
        cookieDeclBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        cookieDeclBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        cookieDeclBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        cookieDeclBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        cookieDeclFontOverrides:
          type: array
          items:
            $ref: >-
              #/components/schemas/CookieDeclarationWidgetCookieDeclFontOverridesItem
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `cookie-declaration` widget: its `type` and its own fields. A field
        left out takes its default.
      additionalProperties: true
    NewsletterWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - newsletter
          description: 'The widget’s type: always `newsletter`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        _newsletterForm:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Subscription form
          description: >-
            The Form (Forms manager) that receives these submissions and routes
            them — configure its destinations on the form’s Actions tab. Create
            one if you have not yet. The related `@apostrophecms/form`
            documents, in order (empty when none). To set it, send a list of `{
            "_id": "…" }`, one per document (one at most); a document the site
            can’t find is left out.
          maxItems: 1
        newsletterEyebrowEnabled:
          type: boolean
          title: Show eyebrow
          default: true
          description: Show eyebrow.
        newsletterEyebrow:
          type: string
          title: Eyebrow
          description: Small label shown above the title.
          default: Newsletter
        newsletterEyebrowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the eyebrow + its dash. Leave empty to use the
            secondary (mint) color.
          title: Eyebrow color (dark theme)
        newsletterEyebrowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the mint default.
          title: Eyebrow color (light theme)
        newsletterEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        newsletterEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        newsletterHeading:
          type: string
          title: Heading
          default: Subscribe for updates
          description: Heading.
        newsletterHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Color (dark theme)
        newsletterHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Color (light theme)
        newsletterHeadingWeight:
          type:
            - string
            - 'null'
          title: Weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Weight.
        newsletterHeadingSize:
          type:
            - string
            - 'null'
          title: Size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Size.
        newsletterIntro:
          type: string
          title: Intro
          description: Optional short sentence under the heading.
          default: >-
            Get the latest news and updates delivered to your inbox. No spam,
            unsubscribe anytime.
        newsletterIntroColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Color (dark theme)
        newsletterIntroColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Color (light theme)
        newsletterIntroWeight:
          type:
            - string
            - 'null'
          title: Weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Weight.
        newsletterIntroSize:
          type:
            - string
            - 'null'
          title: Size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Size.
        newsletterBand:
          type:
            - string
            - 'null'
          title: Band style
          description: >-
            Plain sits on the page; Raised is a contained card; Accent is a
            solid brand-color band.
          default: raised
          enum:
            - plain
            - raised
            - accent
            - null
        newsletterAccentColor:
          type:
            - string
            - 'null'
          description: The accent band color. Leave empty to use the site accent color.
          title: Band color (dark theme)
        newsletterAccentColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the accent.
          title: Band color (light theme)
        newsletterAlign:
          type:
            - string
            - 'null'
          title: Alignment
          default: center
          enum:
            - center
            - left
            - null
          description: Alignment.
        newsletterLayout:
          type:
            - string
            - 'null'
          title: Form layout
          description: >-
            Inline puts the field + button on one row (stacks on small screens);
            Stacked always stacks them.
          default: inline
          enum:
            - inline
            - stacked
            - null
        newsletterWidth:
          type:
            - string
            - 'null'
          title: Content width
          default: normal
          enum:
            - narrow
            - normal
            - wide
            - null
          description: Content width.
        newsletterNameEnabled:
          type: boolean
          title: Collect a name
          default: false
          description: Collect a name.
        newsletterNameLabel:
          type: string
          title: Name label
          default: Name
          description: Name label.
        newsletterNamePlaceholder:
          type: string
          title: Name placeholder
          default: Your name
          description: Name placeholder.
        newsletterEmailLabel:
          type: string
          title: Email label
          default: Email address
          description: Email label.
        newsletterEmailPlaceholder:
          type: string
          title: Email placeholder
          default: you@example.com
          description: Email placeholder.
        newsletterConsentEnabled:
          type: boolean
          title: Show a consent checkbox
          description: Optional opt-in checkbox (e.g. for GDPR-style explicit consent).
          default: false
        newsletterConsentText:
          type: string
          title: Consent statement
          default: I agree to receive email updates and accept the privacy policy.
          description: Consent statement.
        newsletterDisclaimer:
          type: string
          title: Fine print (optional)
          description: A small line under the form, e.g. an unsubscribe note.
          default: We respect your privacy. Unsubscribe at any time.
        newsletterSuccessMessage:
          type: string
          title: Success message
          default: Thanks for subscribing! We’ll be in touch.
          description: Success message.
        newsletterErrorMessage:
          type: string
          title: Error message
          default: Sorry, something went wrong. Please try again.
          description: Error message.
        newsletterBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        newsletterBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        newsletterBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        newsletterBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        newsletterFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/NewsletterWidgetNewsletterFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        newsletterSubmitLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: Subscribe
        newsletterSubmitVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: solid
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        newsletterSubmitSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        newsletterSubmitRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        newsletterSubmitColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        newsletterSubmitColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        newsletterSubmitTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        newsletterSubmitTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        newsletterSubmitHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        newsletterSubmitHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        newsletterSubmitStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        newsletterSubmitShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        newsletterSubmitShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        newsletterSubmitAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        newsletterSubmitIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: ''
        newsletterSubmitIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        newsletterSubmitIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: before
          enum:
            - before
            - after
            - null
        newsletterSubmitIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `newsletter` widget: its `type` and its own fields. A field left out
        takes its default.
      additionalProperties: true
    SmsSignupWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - sms-signup
          description: 'The widget’s type: always `sms-signup`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        _smsSignupForm:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Subscription form
          description: >-
            The Form (Forms manager) that receives these SMS opt-ins and routes
            them — configure its destinations on the form’s Actions tab. The
            related `@apostrophecms/form` documents, in order (empty when none).
            To set it, send a list of `{ "_id": "…" }`, one per document (one at
            most); a document the site can’t find is left out.
          maxItems: 1
        smsSignupEyebrowEnabled:
          type: boolean
          title: Show eyebrow
          default: true
          description: Show eyebrow.
        smsSignupEyebrow:
          type: string
          title: Eyebrow
          description: Small label shown above the title.
          default: Stay connected
        smsSignupEyebrowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the eyebrow + its dash. Leave empty to use the
            secondary (mint) color.
          title: Eyebrow color (dark theme)
        smsSignupEyebrowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the mint default.
          title: Eyebrow color (light theme)
        smsSignupEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        smsSignupEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        smsSignupHeading:
          type: string
          title: Heading
          default: Get text updates
          description: Heading.
        smsSignupHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Color (dark theme)
        smsSignupHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Color (light theme)
        smsSignupHeadingWeight:
          type:
            - string
            - 'null'
          title: Weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Weight.
        smsSignupHeadingSize:
          type:
            - string
            - 'null'
          title: Size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Size.
        smsSignupIntro:
          type: string
          title: Intro
          description: Optional short sentence under the heading.
          default: Sign up for occasional text messages. Standard rates may apply.
        smsSignupIntroColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Color (dark theme)
        smsSignupIntroColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Color (light theme)
        smsSignupIntroWeight:
          type:
            - string
            - 'null'
          title: Weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Weight.
        smsSignupIntroSize:
          type:
            - string
            - 'null'
          title: Size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Size.
        smsSignupBand:
          type:
            - string
            - 'null'
          title: Band style
          description: >-
            Plain sits on the page; Raised is a contained card; Accent is a
            solid brand-color band.
          default: raised
          enum:
            - plain
            - raised
            - accent
            - null
        smsSignupAccentColor:
          type:
            - string
            - 'null'
          description: The accent band color. Leave empty to use the site accent color.
          title: Band color (dark theme)
        smsSignupAccentColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the accent.
          title: Band color (light theme)
        smsSignupAlign:
          type:
            - string
            - 'null'
          title: Alignment
          default: center
          enum:
            - center
            - left
            - null
          description: Alignment.
        smsSignupLayout:
          type:
            - string
            - 'null'
          title: Form layout
          description: >-
            Inline puts the field + button on one row (stacks on small screens);
            Stacked always stacks them.
          default: inline
          enum:
            - inline
            - stacked
            - null
        smsSignupWidth:
          type:
            - string
            - 'null'
          title: Content width
          default: normal
          enum:
            - narrow
            - normal
            - wide
            - null
          description: Content width.
        smsSignupNameEnabled:
          type: boolean
          title: Collect a name
          default: false
          description: Collect a name.
        smsSignupNameLabel:
          type: string
          title: Name label
          default: Name
          description: Name label.
        smsSignupNamePlaceholder:
          type: string
          title: Name placeholder
          default: Your name
          description: Name placeholder.
        smsSignupPhoneLabel:
          type: string
          title: Phone label
          default: Mobile number
          description: Phone label.
        smsSignupPhonePlaceholder:
          type: string
          title: Phone placeholder
          default: (555) 555-5555
          description: Phone placeholder.
        smsSignupConsentText:
          type: string
          title: Consent statement (required checkbox)
          description: >-
            Shown beside a required checkbox; the form shows only once this is
            filled in. Be specific about what they are agreeing to. The brand
            name is added automatically from Site settings.
          default: >-
            I agree to receive recurring automated marketing text messages at
            the phone number provided. Consent is not a condition of purchase.
        smsSignupTermsText:
          type: string
          title: Program terms (fine print)
          description: Carrier-compliance fine print shown under the form.
          default: >-
            Message frequency varies. Msg & data rates may apply. Reply STOP to
            opt out, HELP for help.
        smsSignupPrivacyUrl:
          type: string
          title: Privacy policy link
          description: Optional — linked from the fine print.
          default: ''
        smsSignupTermsUrl:
          type: string
          title: SMS terms link
          description: Optional — linked from the fine print.
          default: ''
        smsSignupSuccessMessage:
          type: string
          title: Success message
          default: Thanks! Check your phone for a message to confirm your subscription.
          description: Success message.
        smsSignupErrorMessage:
          type: string
          title: Error message
          default: Sorry, something went wrong. Please try again.
          description: Error message.
        smsSignupBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        smsSignupBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        smsSignupBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        smsSignupBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        smsSignupFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/SmsSignupWidgetSmsSignupFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        smsSignupSubmitLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: Sign up
        smsSignupSubmitVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: solid
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        smsSignupSubmitSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        smsSignupSubmitRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        smsSignupSubmitColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        smsSignupSubmitColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        smsSignupSubmitTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        smsSignupSubmitTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        smsSignupSubmitHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        smsSignupSubmitHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        smsSignupSubmitStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        smsSignupSubmitShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        smsSignupSubmitShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        smsSignupSubmitAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        smsSignupSubmitIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: ''
        smsSignupSubmitIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        smsSignupSubmitIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: before
          enum:
            - before
            - after
            - null
        smsSignupSubmitIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
        - smsSignupConsentText
      description: >-
        A `sms-signup` widget: its `type` and its own fields. A field left out
        takes its default.
      additionalProperties: true
    FormRenderWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - form-render
          description: 'The widget’s type: always `form-render`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        _form:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Form
          description: >-
            The form to show here. Build and edit the form itself in the Forms
            manager (create one there first if needed). The related
            `@apostrophecms/form` documents, in order (empty when none). To set
            it, send a list of `{ "_id": "…" }`, one per document (one at most);
            a document the site can’t find is left out.
          maxItems: 1
        styleOverride:
          type: boolean
          title: Restyle for this placement
          description: >-
            Off: the form renders with the styling saved on the form itself. On:
            the styling below replaces it here only — the form’s fields and
            other placements are unaffected.
          default: false
        formFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/FormRenderWidgetFormFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this form in a different typeface. Leave empty
            to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        formEyebrowEnabled:
          type: boolean
          title: Show eyebrow
          default: true
          description: Show eyebrow.
        formEyebrow:
          type: string
          title: Eyebrow
          description: Small label shown above the title.
          default: Get in touch
        formEyebrowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the eyebrow + its dash. Leave empty to use the
            secondary (mint) color.
          title: Eyebrow color (dark theme)
        formEyebrowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the mint default.
          title: Eyebrow color (light theme)
        formEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        formEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        formHeading:
          type: string
          title: Heading
          default: Send us a message
          description: Heading.
        formHeadingColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to track the theme text color.
          title: Color (dark theme)
        formHeadingColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Color (light theme)
        formHeadingWeight:
          type:
            - string
            - 'null'
          title: Weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Weight.
        formHeadingSize:
          type:
            - string
            - 'null'
          title: Size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Size.
        formIntro:
          type: string
          title: Intro
          description: Optional short sentence under the heading.
          default: Fill out the form below and we’ll get back to you shortly.
        formIntroColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the muted text color.
          title: Color (dark theme)
        formIntroColorLight:
          type:
            - string
            - 'null'
          description: Optional light-theme override. Falls back to the dark-theme color.
          title: Color (light theme)
        formIntroWeight:
          type:
            - string
            - 'null'
          title: Weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Weight.
        formIntroSize:
          type:
            - string
            - 'null'
          title: Size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - xxlarge
            - null
          description: Size.
        formBand:
          type:
            - string
            - 'null'
          title: Band style
          description: >-
            Plain sits on the page; Raised is a contained card; Accent is a
            solid brand-color band.
          default: raised
          enum:
            - plain
            - raised
            - accent
            - null
        formAccentColor:
          type:
            - string
            - 'null'
          description: The accent band color. Leave empty to use the site accent color.
          title: Band color (dark theme)
        formAccentColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the accent.
          title: Band color (light theme)
        formAlign:
          type:
            - string
            - 'null'
          title: Header alignment
          description: >-
            Alignment of the section header (the form fields stay left-aligned
            for legibility).
          default: center
          enum:
            - center
            - left
            - null
        formWidth:
          type:
            - string
            - 'null'
          title: Content width
          default: normal
          enum:
            - narrow
            - normal
            - wide
            - null
          description: Content width.
        formLabelGap:
          type:
            - string
            - 'null'
          title: Label spacing
          description: Vertical space between each field’s label and its input.
          default: normal
          enum:
            - compact
            - normal
            - roomy
            - spacious
            - null
        formBg:
          type:
            - string
            - 'null'
          title: Section background (dark theme)
          description: >-
            The section’s full-width background band in dark mode. Transparent
            lets the page background show through. The palette options track the
            site colors; choose “Custom color…” for a specific color.
          default: transparent
          enum:
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        formBgCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (dark theme)” is set to Custom color.
          title: Custom background (dark theme)
        formBgLight:
          type:
            - string
            - 'null'
          title: Section background (light theme)
          description: >-
            “Match dark theme” reuses the dark-theme choice; otherwise set the
            light-mode band independently.
          default: inherit
          enum:
            - inherit
            - transparent
            - surface
            - raised
            - sunken
            - hill
            - accent-soft
            - custom
            - null
        formBgLightCustom:
          type:
            - string
            - 'null'
          description: Used when “Section background (light theme)” is set to Custom color.
          title: Custom background (light theme)
        formSubmitLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: Submit
        formSubmitVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: solid
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        formSubmitSize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        formSubmitRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        formSubmitColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-accent'
        formSubmitColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        formSubmitTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-ink'
        formSubmitTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        formSubmitHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        formSubmitHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        formSubmitStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        formSubmitShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        formSubmitShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        formSubmitAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        formSubmitIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: ''
        formSubmitIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        formSubmitIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: before
          enum:
            - before
            - after
            - null
        formSubmitIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `form-render` widget: its `type` and its own fields. A field left out
        takes its default.
      additionalProperties: true
    FinalCtaWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - final-cta
          description: 'The widget’s type: always `final-cta`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        ctaAlign:
          type:
            - string
            - 'null'
          title: Content alignment
          default: center
          enum:
            - center
            - left
            - null
          description: Content alignment.
        ctaEyebrowEnabled:
          type: boolean
          title: Show eyebrow / kicker
          default: false
          description: Show eyebrow / kicker.
        ctaEyebrow:
          type: string
          title: Eyebrow
          description: Small label shown above the title.
          default: ''
        ctaEyebrowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the eyebrow + its dash. Leave empty to use the
            secondary (mint) color.
          title: Eyebrow color (dark theme)
        ctaEyebrowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the mint default.
          title: Eyebrow color (light theme)
        ctaEyebrowWeight:
          type:
            - string
            - 'null'
          title: Eyebrow weight
          default: bold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Eyebrow weight.
        ctaEyebrowSize:
          type:
            - string
            - 'null'
          title: Eyebrow size
          default: normal
          enum:
            - small
            - normal
            - large
            - xlarge
            - null
          description: Eyebrow size.
        ctaIconPlacement:
          type:
            - string
            - 'null'
          title: Decorative icon
          description: An optional Font Awesome icon above the headline.
          default: top
          enum:
            - none
            - top
            - null
        ctaIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: rocket
        ctaIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        ctaIconColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the design’s own color rhythm.
          title: Icon color
        ctaIconAnimation:
          type:
            - string
            - 'null'
          title: Icon animation
          default: none
          enum:
            - none
            - fa-beat
            - fa-bounce
            - fa-fade
            - fa-beat-fade
            - fa-flip
            - fa-shake
            - fa-spin
            - null
          description: Icon animation.
        ctaIconSize:
          type:
            - string
            - 'null'
          title: Icon size
          description: Relative to the component’s base icon size.
          default: 3x
          enum:
            - default
            - sm
            - lg
            - xl
            - 2xl
            - 2x
            - 3x
            - 4x
            - 5x
            - null
        ctaIconTilt:
          type:
            - string
            - 'null'
          title: Icon tilt
          description: A slight rotation for a more playful look.
          default: left
          enum:
            - none
            - left
            - right
            - null
        ctaHeadline:
          type: string
          title: Headline
          default: Ready to get started?
          description: Headline.
        ctaHeadlineColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the headline color. Leave empty for the
            on-accent (legible-on-band) default.
          title: Headline color (dark theme)
        ctaHeadlineColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the on-accent default.
          title: Headline color (light theme)
        ctaHeadlineWeight:
          type:
            - string
            - 'null'
          title: Headline weight
          default: extrabold
          enum:
            - normal
            - medium
            - semibold
            - bold
            - extrabold
            - null
          description: Headline weight.
        ctaBody:
          type: string
          title: Supporting copy
          default: >-
            Tell us what you need and we’ll get back to you soon. It only takes
            a minute.
          description: Supporting copy.
        ctaBodyColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Overrides the supporting-copy color. Leave empty for the
            softened on-accent default.
          title: Body color (dark theme)
        ctaBodyColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the softened on-accent default.
          title: Body color (light theme)
        ctaBodyWeight:
          type:
            - string
            - 'null'
          title: Body weight
          default: normal
          enum:
            - normal
            - medium
            - semibold
            - bold
            - null
          description: Body weight.
        ctaBackgroundType:
          type:
            - string
            - 'null'
          title: Background type
          description: >-
            Solid keeps the loud color block; Image places a photo behind the
            text with a readability overlay.
          default: solid
          enum:
            - solid
            - image
            - null
        ctaBackgroundColor:
          type:
            - string
            - 'null'
          description: >-
            The solid band color (and the fallback behind a background image).
            Leave empty to use the site accent color.
          title: Band color (dark theme)
        ctaBackgroundColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color,
            then the accent.
          title: Band color (light theme)
        ctaImage:
          title: Background image
          description: >-
            Widgets, top to bottom: send `{ "items": [ … ] }`, one object per
            widget with its `type`. Writing it replaces the whole area.
          allOf:
            - $ref: '#/components/schemas/ImageArea'
        ctaOverlayColor:
          type:
            - string
            - 'null'
          description: >-
            Scrim over the image to keep the text readable. Leave empty to use
            the accent color.
          title: Overlay color (dark theme)
        ctaOverlayColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme overlay,
            then the accent.
          title: Overlay color (light theme)
        ctaOverlayOpacity:
          type:
            - number
            - 'null'
          title: Overlay opacity (%)
          default: 70
          minimum: 0
          maximum: 100
          x-fetchski-clamped: true
          description: Overlay opacity (%).
        ctaRings:
          type: boolean
          title: Show decorative rings
          description: The two large outlined circles on the band.
          default: true
        ctaRingColor:
          type:
            - string
            - 'null'
          description: >-
            Drawn at a low opacity. Leave empty to use the on-accent (white-ish)
            default.
          title: Ring color
        ctaFontOverrides:
          type: array
          items:
            $ref: '#/components/schemas/FinalCtaWidgetCtaFontOverridesItem'
          title: Font overrides
          description: >-
            Optional. Set part of this section in a different typeface. Leave
            empty to follow the site’s fonts (Site design → Typography).
          default: []
          maxItems: 4
        ctaPrimaryLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: Get started
        ctaPrimaryUrl:
          type: string
          title: Button link
          description: Where the button goes — a path (/blog) or full URL.
          default: /services
        ctaPrimaryNewTab:
          type: boolean
          title: Open in new tab
          description: >-
            Opens the link in a new browser tab (adds rel="noopener
            noreferrer").
          default: false
        ctaPrimaryVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: solid
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        ctaPrimarySize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        ctaPrimaryRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        ctaPrimaryColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-on-accent'
        ctaPrimaryColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        ctaPrimaryTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-accent'
        ctaPrimaryTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        ctaPrimaryHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        ctaPrimaryHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        ctaPrimaryStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        ctaPrimaryShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        ctaPrimaryShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        ctaPrimaryAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        ctaPrimaryIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: arrow-right
        ctaPrimaryIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        ctaPrimaryIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: after
          enum:
            - before
            - after
            - null
        ctaPrimaryIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        ctaSecondaryLabel:
          type: string
          title: Button label
          description: The visible button text. Leave empty to hide the button.
          default: Contact us
        ctaSecondaryUrl:
          type: string
          title: Button link
          description: Where the button goes — a path (/blog) or full URL.
          default: /contact-us
        ctaSecondaryNewTab:
          type: boolean
          title: Open in new tab
          description: >-
            Opens the link in a new browser tab (adds rel="noopener
            noreferrer").
          default: false
        ctaSecondaryVariant:
          type:
            - string
            - 'null'
          title: Button style
          description: >-
            Solid fills with the color; Outline / Soft / Text link use it for
            the border + text.
          default: outline
          enum:
            - solid
            - outline
            - soft
            - link
            - null
        ctaSecondarySize:
          type:
            - string
            - 'null'
          title: Button size
          default: normal
          enum:
            - small
            - normal
            - large
            - null
          description: Button size.
        ctaSecondaryRadius:
          type:
            - string
            - 'null'
          title: Corner radius
          default: slight
          enum:
            - pill
            - rounded
            - slight
            - square
            - null
          description: Corner radius.
        ctaSecondaryColor:
          type:
            - string
            - 'null'
          description: >-
            Solid fill, or the border + text for the other styles. Defaults to
            the brand accent; CLEAR it for a transparent, outline-only button.
          title: Button color (dark theme)
          default: '--fetchski-on-accent'
        ctaSecondaryColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme color.
            (Brand tokens already flip per theme.)
          title: Button color (light theme)
        ctaSecondaryTextColor:
          type:
            - string
            - 'null'
          description: >-
            The text/icon color. Clear it to derive from the button color
            (readable on solid fills).
          title: Label color (dark theme)
          default: '--fetchski-on-accent'
        ctaSecondaryTextColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme label
            color.
          title: Label color (light theme)
        ctaSecondaryHoverColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. Drives the hover treatment. Leave empty to derive it from
            the button color.
          title: Hover color (dark theme)
        ctaSecondaryHoverColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme hover
            color.
          title: Hover color (light theme)
        ctaSecondaryStyle:
          type:
            - string
            - 'null'
          title: Hover surface
          description: >-
            The hover treatment: a soft shadow, a colored offset shadow, a glow,
            a fill sweep, or a thicker border.
          default: sweep
          enum:
            - none
            - single
            - dual
            - glow
            - sweep
            - thicken
            - null
        ctaSecondaryShadowColor:
          type:
            - string
            - 'null'
          description: >-
            Optional. The offset-shadow or glow color on hover. Leave empty to
            use the site secondary color.
          title: Offset / glow color (dark theme)
        ctaSecondaryShadowColorLight:
          type:
            - string
            - 'null'
          description: >-
            Optional light-theme override. Falls back to the dark-theme shadow
            color.
          title: Offset / glow color (light theme)
        ctaSecondaryAnimation:
          type:
            - string
            - 'null'
          title: Hover motion
          default: lift-scale
          enum:
            - lift
            - scale
            - lift-scale
            - none
            - null
          description: Hover motion.
        ctaSecondaryIcon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: ''
        ctaSecondaryIconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        ctaSecondaryIconPosition:
          type:
            - string
            - 'null'
          title: Icon position
          description: Which side of the label the icon sits on (when an icon name is set).
          default: before
          enum:
            - before
            - after
            - null
        ctaSecondaryIconNudge:
          type: boolean
          title: Nudge icon on hover
          description: >-
            The icon slides toward its side on hover (e.g. an arrow edges
            outward).
          default: false
        sectionCss:
          type:
            - object
            - 'null'
          description: >-
            CSS for this one section, typed into the slot of the part it styles.
            It wins over Site design → Custom CSS. Nested rules like &:hover,
            @media (width &gt;= 48rem) and [data-theme="light"] & work inside a
            slot.
          properties:
            slots:
              type: object
              additionalProperties:
                type: string
              description: The CSS typed into each part slot, by slot name.
            css:
              type: string
              description: 'The compiled CSS (read only: rebuilt from `slots`).'
            mark:
              type: string
              description: The site’s check mark for `css` (read only).
          title: Custom CSS
      required:
        - type
      description: >-
        A `final-cta` widget: its `type` and its own fields. A field left out
        takes its default.
      additionalProperties: true
    LayoutColumnArea:
      type: object
      description: >-
        Content made of widgets, as the site stores it: send `{ "items": [ … ]
        }`, one object per widget, top to bottom. It takes
        `@apostrophecms/layout-column` widgets; an item of any other type is
        dropped. Writing it replaces the whole area.
      properties:
        metaType:
          type: string
          enum:
            - area
          description: Always `area`.
        _id:
          type: string
          description: 'The area’s id, set by the site: leave it out when you write one.'
        items:
          type: array
          description: >-
            The widgets, top to bottom. Each is an object with its `type` and
            that widget’s own fields; `_id` and `metaType` may be left out (the
            site sets them).
          items:
            $ref: '#/components/schemas/LayoutColumnWidget'
      additionalProperties: true
      example:
        items:
          - type: '@apostrophecms/layout-column'
    IntroWidgetIntroFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: '#/components/schemas/IntroWidgetIntroFontOverridesItemUploadsItem'
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    FeatureWidgetFeatureCardsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        icon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: star
        iconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        iconColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the design’s own color rhythm.
          title: Icon color
        iconAnimation:
          type:
            - string
            - 'null'
          title: Icon animation
          default: none
          enum:
            - none
            - fa-beat
            - fa-bounce
            - fa-fade
            - fa-beat-fade
            - fa-flip
            - fa-shake
            - fa-spin
            - null
          description: Icon animation.
        iconSize:
          type:
            - string
            - 'null'
          title: Icon size
          description: Relative to the component’s base icon size.
          default: default
          enum:
            - default
            - sm
            - lg
            - xl
            - 2xl
            - 2x
            - 3x
            - 4x
            - 5x
            - null
        cardTitle:
          type: string
          title: Title
          default: ''
          description: Title.
        cardText:
          type: string
          title: Text
          default: ''
          description: Text.
      required:
        - cardTitle
      additionalProperties: true
    FeatureWidgetFeatureFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: >-
              #/components/schemas/FeatureWidgetFeatureFontOverridesItemUploadsItem
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    StatsWidgetStatsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        icon:
          type: string
          title: Icon name
          description: >-
            Optional Font Awesome icon shown above the number (e.g. star, bolt,
            chart-line). Leave empty for no icon.
          default: ''
        iconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        iconColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the design’s own color rhythm.
          title: Icon color
        valuePrefix:
          type: string
          title: Prefix
          description: >-
            Optional, shown before the number (e.g. $, ~, &gt;). Kept out of the
            count-up.
          default: ''
        value:
          type: string
          title: Value
          description: >-
            The number, e.g. 500, 4.9, 12 — symbols go in the prefix/suffix so
            the count-up animates the number alone.
          default: ''
        valueSuffix:
          type: string
          title: Suffix
          description: Optional, shown after the number (e.g. +, %, k, yrs, ★).
          default: ''
        label:
          type: string
          title: Label
          default: ''
          description: Label.
        description:
          type: string
          title: Description
          description: Optional small text under the label.
          default: ''
      required:
        - value
        - label
      additionalProperties: true
    StatsWidgetStatsFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: '#/components/schemas/StatsWidgetStatsFontOverridesItemUploadsItem'
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    StepsWidgetStepsItemsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        icon:
          type: string
          title: Icon name
          description: >-
            Optional Font Awesome icon for this step (e.g. calendar-check,
            circle-check, gear). Shown in the marker when the section marker is
            set to "Icon"; otherwise the step is numbered.
          default: ''
        iconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        iconColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the design’s own color rhythm.
          title: Icon color
        number:
          type: string
          title: Marker label (optional)
          description: >-
            Overrides the auto number for this step’s marker, e.g. "01" or "A".
            Leave empty to auto-count.
          default: ''
        title:
          type: string
          title: Title
          default: ''
          description: Title.
        body:
          type: string
          title: Body
          description: Optional description under the title.
          default: ''
      required:
        - title
      additionalProperties: true
    StepsWidgetStepsFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: '#/components/schemas/StepsWidgetStepsFontOverridesItemUploadsItem'
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    PricingWidgetPricingTiersItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        name:
          type: string
          title: Name
          description: Tier / package / service name — e.g. "Starter", "Studio", "Agency".
          default: ''
        icon:
          type: string
          title: Icon name
          description: >-
            Any Font Awesome icon name, e.g. star, bolt, arrow-left-to-bracket
            (no “fa-” prefix). Browse at fontawesome.com/icons.
          default: ''
        iconFamily:
          type:
            - string
            - 'null'
          title: Icon family
          default: classic-regular
          enum:
            - classic-regular
            - duotone-regular
            - brands
            - jelly
            - jelly-duo
            - whiteboard
            - null
          description: Icon family.
        iconColor:
          type:
            - string
            - 'null'
          description: Optional — leave empty to use the design’s own color rhythm.
          title: Icon color
        iconAnimation:
          type:
            - string
            - 'null'
          title: Icon animation
          default: none
          enum:
            - none
            - fa-beat
            - fa-bounce
            - fa-fade
            - fa-beat-fade
            - fa-flip
            - fa-shake
            - fa-spin
            - null
          description: Icon animation.
        iconSize:
          type:
            - string
            - 'null'
          title: Icon size
          description: Relative to the component’s base icon size.
          default: default
          enum:
            - default
            - sm
            - lg
            - xl
            - 2xl
            - 2x
            - 3x
            - 4x
            - 5x
            - null
        iconGap:
          type:
            - string
            - 'null'
          title: Icon spacing
          description: Breathing room below the icon, before the card name.
          default: normal
          enum:
            - none
            - small
            - normal
            - large
            - xlarge
            - null
        badge:
          type: string
          title: Badge (optional)
          description: >-
            A small ribbon on the card, e.g. "Best value", "Limited spots".
            Overrides the default highlight badge for this tier; works on any
            tier, highlighted or not. Empty on a highlighted tier falls back to
            the section’s "Default highlight badge".
          default: ''
        highlighted:
          type: boolean
          title: Highlight this card
          description: >-
            Emphasize this tier — accent border + ring, a subtle lift, and the
            Featured button look.
          default: false
        textAlign:
          type:
            - string
            - 'null'
          title: Text alignment
          description: >-
            How this card’s text lines up. Normal = the section default (a
            centered section keeps the feature list left-aligned, as now).
            Center also centers the feature list; Left / Right align everything
            that way.
          default: normal
          enum:
            - normal
            - left
            - center
            - right
            - null
        price:
          type: string
          title: Price
          description: >-
            Free text, so it fits any model — "$45", "From $200", "Custom",
            "Call for quote".
          default: ''
        period:
          type: string
          title: Period (optional)
          description: >-
            Shown after the price, e.g. "/ month", "per night", "per session".
            Leave empty for a flat price.
          default: ''
        priceNote:
          type: string
          title: Price note (optional)
          description: >-
            A small line under the price, e.g. "per seat", "billed annually", "+
            tax".
          default: ''
        description:
          type: string
          title: Description (optional)
          description: A short blurb under the name.
          default: ''
        features:
          type: array
          items:
            $ref: '#/components/schemas/PricingWidgetPricingTiersItemFeaturesItem'
          title: Features
          description: The bullet list of what’s included.
          default: []
        ctaLabel:
          type: string
          title: Button label (optional)
          description: >-
            This card’s button text. Leave empty to use the shared button label
            (set in the Pricing · Buttons tab); clear it everywhere to hide the
            button.
          default: ''
        ctaUrl:
          type: string
          title: Button link (optional)
          description: >-
            Where the button goes — a path (/contact-us) or full URL. Leave
            empty to inherit the shared button link.
          default: ''
        ctaNewTab:
          type: boolean
          title: Open button in new tab
          default: false
          description: Open button in new tab.
      required:
        - name
      additionalProperties: true
    PricingWidgetPricingFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: >-
              #/components/schemas/PricingWidgetPricingFontOverridesItemUploadsItem
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    MediaTextWidgetMediaTextBlocksItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        layout:
          type:
            - string
            - 'null'
          title: Layout
          description: >-
            Media left / right place the media beside the text; Stacked puts
            media above the text; Full-bleed runs the media edge-to-edge with
            the text below.
          default: media-left
          enum:
            - media-left
            - media-right
            - stacked
            - full
            - null
        mediaType:
          type:
            - string
            - 'null'
          title: Media
          description: >-
            Pick where the media comes from. “None” makes this a text-only
            block.
          default: image
          enum:
            - image
            - video
            - embed
            - none
            - null
        _image:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Image
          description: >-
            Pick an image from the Images library. The related
            `@apostrophecms/image` documents, in order (empty when none). To set
            it, send a list of `{ "_id": "…" }`, one per document (one at most);
            a document the site can’t find is left out.
          maxItems: 1
        imageAlt:
          type: string
          title: Image alt text (optional)
          description: >-
            Describe the image for screen readers and SEO. Leave empty to use
            the library image’s own alt text. Set to a single space for a purely
            decorative image.
          default: ''
        _video:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Video
          description: >-
            Pick a clip from the Videos library (⌘K → Videos). The related
            `video` documents, in order (empty when none). To set it, send a
            list of `{ "_id": "…" }`, one per document (one at most); a document
            the site can’t find is left out.
          maxItems: 1
        videoAutoplay:
          type: boolean
          title: Auto-play (muted loop)
          description: >-
            Play automatically as a muted, looping background clip (a pause
            button is shown, and reduced-motion visitors get the poster image).
            Off = a normal video with play controls.
          default: false
        embedUrl:
          type: string
          title: Video URL
          description: >-
            Paste a YouTube or Vimeo link, e.g. https://youtu.be/… or
            https://vimeo.com/…
          default: ''
        eyebrow:
          type: string
          title: Eyebrow (optional)
          description: A small label above the block heading.
          default: ''
        heading:
          type: string
          title: Heading (optional)
          description: The block’s headline.
          default: ''
        body:
          type: string
          title: Body (optional)
          description: A paragraph or two. Leave a blank line between paragraphs.
          default: ''
        ctaLabel:
          type: string
          title: Button label (optional)
          description: >-
            This block’s button text. Leave empty (with no link) to hide the
            button.
          default: ''
        ctaUrl:
          type: string
          title: Button link (optional)
          description: Where the button goes — a path (/about-us) or full URL.
          default: ''
        ctaNewTab:
          type: boolean
          title: Open button in new tab
          default: false
          description: Open button in new tab.
      additionalProperties: true
    MediaTextWidgetMediaTextFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: >-
              #/components/schemas/MediaTextWidgetMediaTextFontOverridesItemUploadsItem
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    DeviceMockWidgetDeviceMockFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: >-
              #/components/schemas/DeviceMockWidgetDeviceMockFontOverridesItemUploadsItem
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    FaqWidgetFaqFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: '#/components/schemas/FaqWidgetFaqFontOverridesItemUploadsItem'
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    LogosWidgetLogosItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        _image:
          type: array
          items:
            type: object
            additionalProperties: true
          title: Logo
          description: >-
            Pick a logo from the Images library. A transparent PNG or an SVG
            works best. The related `@apostrophecms/image` documents, in order
            (empty when none). To set it, send a list of `{ "_id": "…" }`, one
            per document (one at most); a document the site can’t find is left
            out.
          maxItems: 1
        name:
          type: string
          title: Name
          description: >-
            Company / partner / certification name — used as the image alt text
            and the link title.
          default: ''
        linkUrl:
          type: string
          title: Link (optional)
          description: >-
            Make this logo a link, e.g. to the partner’s site. Opens in a new
            tab for external URLs.
          default: ''
        invertDark:
          type: boolean
          title: Invert on dark theme
          description: >-
            For dark / black logos that would vanish on the dark theme — flips
            them to light. Leave off for full-color or white logos.
          default: false
      required:
        - _image
        - name
      additionalProperties: true
    LogosWidgetLogosFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: '#/components/schemas/LogosWidgetLogosFontOverridesItemUploadsItem'
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    TeamWidgetTeamFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: '#/components/schemas/TeamWidgetTeamFontOverridesItemUploadsItem'
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    ServiceMapWidgetServiceMapZoneOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        zoneName:
          type: string
          title: Zone name (as provided by the data)
          description: Case-insensitive match against the zone name in the map data.
          default: ''
        displayName:
          type: string
          title: Display name
          description: Optional replacement name shown everywhere this zone appears.
          default: ''
        priceLabel:
          type: string
          title: Price label
          description: >-
            Optional replacement for the price text (e.g. “Included”, “Call
            us”). Overrides the zero-price label too.
          default: ''
        hide:
          type: boolean
          title: Hide this zone from the key and cards
          description: >-
            The zone stays on the map and in search results — it just leaves the
            key and cards.
          default: false
      required:
        - zoneName
      additionalProperties: true
    ServiceMapWidgetServiceMapFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: >-
              #/components/schemas/ServiceMapWidgetServiceMapFontOverridesItemUploadsItem
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    BlogPreviewWidgetBlogFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: >-
              #/components/schemas/BlogPreviewWidgetBlogFontOverridesItemUploadsItem
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    CookieDeclarationWidgetCookieDeclFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: >-
              #/components/schemas/CookieDeclarationWidgetCookieDeclFontOverridesItemUploadsItem
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    NewsletterWidgetNewsletterFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: >-
              #/components/schemas/NewsletterWidgetNewsletterFontOverridesItemUploadsItem
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    SmsSignupWidgetSmsSignupFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: >-
              #/components/schemas/SmsSignupWidgetSmsSignupFontOverridesItemUploadsItem
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    FormRenderWidgetFormFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: >-
              #/components/schemas/FormRenderWidgetFormFontOverridesItemUploadsItem
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    FinalCtaWidgetCtaFontOverridesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        target:
          type:
            - string
            - 'null'
          title: Apply to
          description: >-
            Which text this typeface replaces. Rows apply in order, so a broad
            row (Everything) followed by a narrow one (Headings) gives the
            section a base face plus an exception.
          default: all
          enum:
            - all
            - heading
            - body
            - eyebrow
            - button
            - code
            - null
        source:
          type:
            - string
            - 'null'
          title: Typeface
          description: >-
            Where the typeface comes from. The first option costs nothing extra
            — those faces are already loaded. The others load an additional font
            on pages that use this section.
          default: slot
          enum:
            - slot
            - curated
            - cdn
            - upload
            - null
        slot:
          type:
            - string
            - 'null'
          title: Site typeface
          description: >-
            Set in Site design → Typography. Following the site’s own faces
            keeps a section on-brand and adds no download.
          default: display
          enum:
            - display
            - body
            - accent
            - null
        curated:
          type:
            - string
            - 'null'
          title: Curated pick
          description: >-
            Vetted families from Bunny Fonts and Fontshare, with their available
            weights already verified.
          default: archivo
          enum:
            - archivo
            - bricolage-grotesque
            - clash-display
            - courier-prime
            - dm-mono
            - dm-sans
            - fira-code
            - fraunces
            - general-sans
            - ibm-plex-mono
            - ibm-plex-sans
            - inconsolata
            - inter
            - jetbrains-mono
            - karla
            - lora
            - manrope
            - nunito-sans
            - outfit
            - playfair-display
            - public-sans
            - red-hat-mono
            - satoshi
            - sentient
            - sora
            - source-code-pro
            - source-sans-3
            - source-serif-4
            - space-grotesk
            - space-mono
            - spline-sans-mono
            - supreme
            - switzer
            - syne
            - ubuntu-mono
            - unbounded
            - victor-mono
            - work-sans
            - zodiak
            - null
        cdnProvider:
          type:
            - string
            - 'null'
          title: Provider
          description: >-
            Where to browse for the family. Pick one, then follow the link below
            to find the exact name.
          default: bunny
          enum:
            - bunny
            - fontshare
            - null
        cdnFamily:
          type: string
          title: Family name
          description: >-
            Exactly as the provider’s catalog spells it, e.g. "Space Grotesk" or
            "Clash Display". A name the provider doesn’t have loads nothing and
            this row is ignored.
          default: ''
        cdnWeights:
          type: string
          title: Weights
          description: >-
            Comma-separated weights to load, e.g. 400, 700. Empty loads 400,
            500, 700. Weights the family doesn’t ship are skipped by the CDN and
            synthesized by the browser (faux bold) — but a family that ships
            only ONE weight (Acme, for instance) loads nothing at all unless
            that weight is among these, so set it explicitly if the typeface
            doesn’t appear.
          default: ''
        uploads:
          type: array
          items:
            $ref: '#/components/schemas/FinalCtaWidgetCtaFontOverridesItemUploadsItem'
          title: Font files
          description: >-
            One file per weight/style of the SAME typeface. woff2 strongly
            recommended (smallest, universally supported); woff/ttf/otf also
            accepted.
          default: []
          maxItems: 4
        fallback:
          type:
            - string
            - 'null'
          title: Fallback style
          description: >-
            Generic system font shown while this typeface loads (and if it
            fails). Curated picks set this automatically.
          default: sans
          enum:
            - sans
            - serif
            - mono
            - null
      additionalProperties: true
    LayoutColumnWidget:
      type: object
      properties:
        type:
          type: string
          enum:
            - '@apostrophecms/layout-column'
          description: 'The widget’s type: always `@apostrophecms/layout-column`.'
        _id:
          type: string
          description: >-
            The widget’s id, unique on the page. Leave it out for a new widget
            (the site sets one); keep it to change a widget that is there.
        metaType:
          type: string
          enum:
            - widget
          description: Always `widget`.
        colstart:
          type:
            - integer
            - 'null'
          title: Colstart
          description: Colstart.
        colspan:
          type:
            - integer
            - 'null'
          title: Colspan
          description: Colspan.
        rowstart:
          type:
            - integer
            - 'null'
          title: Rowstart
          default: 1
          description: Rowstart.
        rowspan:
          type:
            - integer
            - 'null'
          title: Rowspan
          default: 1
          description: Rowspan.
        order:
          type:
            - integer
            - 'null'
          title: Order
          description: Order.
        content:
          title: Column content
          description: >-
            Widgets, top to bottom: send `{ "items": [ … ] }`, one object per
            widget with its `type`. Writing it replaces the whole area.
          allOf:
            - $ref: '#/components/schemas/LayoutColumnContentArea'
        showTablet:
          type: boolean
          title: Visible on tablet
          default: true
          description: Visible on tablet.
        showMobile:
          type: boolean
          title: Visible on mobile
          default: true
          description: Visible on mobile.
        justify:
          type:
            - string
            - 'null'
          title: Horizontal alignment
          enum:
            - stretch
            - start
            - end
            - center
            - null
          description: Horizontal alignment.
        align:
          type:
            - string
            - 'null'
          title: Vertical alignment
          enum:
            - stretch
            - start
            - end
            - center
            - null
          description: Vertical alignment.
      required:
        - type
      description: >-
        A `@apostrophecms/layout-column` widget: its `type` and its own fields.
        A field left out takes its default.
      additionalProperties: true
    IntroWidgetIntroFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    FeatureWidgetFeatureFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    StatsWidgetStatsFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    StepsWidgetStepsFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    PricingWidgetPricingTiersItemFeaturesItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        text:
          type: string
          title: Feature
          default: ''
          description: Feature.
        included:
          type: boolean
          title: Included
          description: >-
            On = a check mark; off = a crossed-out / muted line (e.g. a feature
            this tier lacks).
          default: true
        note:
          type: string
          title: Note (optional)
          description: A small qualifier shown after the feature, e.g. "up to 5", "add-on".
          default: ''
      required:
        - text
      additionalProperties: true
    PricingWidgetPricingFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    MediaTextWidgetMediaTextFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    DeviceMockWidgetDeviceMockFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    FaqWidgetFaqFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    LogosWidgetLogosFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    TeamWidgetTeamFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    ServiceMapWidgetServiceMapFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    BlogPreviewWidgetBlogFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    CookieDeclarationWidgetCookieDeclFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    NewsletterWidgetNewsletterFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    SmsSignupWidgetSmsSignupFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    FormRenderWidgetFormFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    FinalCtaWidgetCtaFontOverridesItemUploadsItem:
      type: object
      properties:
        _id:
          type: string
          description: The row’s id, unique in its array.
        file:
          type: object
          description: File attachment reference
          title: Font file
        weight:
          type:
            - string
            - 'null'
          title: Weight
          default: '400'
          enum:
            - '100'
            - '200'
            - '300'
            - '400'
            - '500'
            - '600'
            - '700'
            - '800'
            - '900'
            - null
          description: Weight.
        style:
          type:
            - string
            - 'null'
          title: Style
          default: normal
          enum:
            - normal
            - italic
            - null
          description: Style.
      required:
        - file
      additionalProperties: true
    LayoutColumnContentArea:
      type: object
      description: >-
        Content made of widgets, as the site stores it: send `{ "items": [ … ]
        }`, one object per widget, top to bottom. It takes
        `@apostrophecms/rich-text`, `@apostrophecms/image`,
        `@apostrophecms/video`, `intro`, `stats`, `steps`, `pricing`, `faq`,
        `device-mock` widgets; an item of any other type is dropped. Writing it
        replaces the whole area.
      properties:
        metaType:
          type: string
          enum:
            - area
          description: Always `area`.
        _id:
          type: string
          description: 'The area’s id, set by the site: leave it out when you write one.'
        items:
          type: array
          description: >-
            The widgets, top to bottom. Each is an object with its `type` and
            that widget’s own fields; `_id` and `metaType` may be left out (the
            site sets them).
          items:
            $ref: '#/components/schemas/LayoutColumnContentAreaItem'
      additionalProperties: true
      example:
        items:
          - type: '@apostrophecms/rich-text'
            content: <p>Hello from the API.</p>
    LayoutColumnContentAreaItem:
      description: >-
        A widget in an area that takes `@apostrophecms/rich-text`,
        `@apostrophecms/image`, `@apostrophecms/video`, `intro`, `stats`,
        `steps`, `pricing`, `faq`, `device-mock`: the one its `type` names.
      oneOf:
        - $ref: '#/components/schemas/RichTextWidget'
        - $ref: '#/components/schemas/ImageWidget'
        - $ref: '#/components/schemas/VideoWidget'
        - $ref: '#/components/schemas/IntroWidget'
        - $ref: '#/components/schemas/StatsWidget'
        - $ref: '#/components/schemas/StepsWidget'
        - $ref: '#/components/schemas/PricingWidget'
        - $ref: '#/components/schemas/FaqWidget'
        - $ref: '#/components/schemas/DeviceMockWidget'
      discriminator:
        propertyName: type
        mapping:
          '@apostrophecms/rich-text': '#/components/schemas/RichTextWidget'
          '@apostrophecms/image': '#/components/schemas/ImageWidget'
          '@apostrophecms/video': '#/components/schemas/VideoWidget'
          intro: '#/components/schemas/IntroWidget'
          stats: '#/components/schemas/StatsWidget'
          steps: '#/components/schemas/StepsWidget'
          pricing: '#/components/schemas/PricingWidget'
          faq: '#/components/schemas/FaqWidget'
          device-mock: '#/components/schemas/DeviceMockWidget'
  responses:
    BadRequest:
      description: 'The request is not valid: `message` says what to change.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    Unauthorized:
      description: The credential is missing or not accepted.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    Forbidden:
      description: The caller may not do this.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    NotFound:
      description: Nothing matches, or the caller may not see it.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    InternalServerError:
      description: 'The site failed: `message` is the generic “An error occurred.”'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Paste your API key as the CMS showed it: `fsk_<site>_<key id>_<secret>`
        (issued under API Keys). `ApiKey ` in front of it works too. Leave it
        empty to read as the public.
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        A person’s bearer token, from **Signing in (people)** → `POST
        /@apostrophecms/login/login`. Apps use an API key instead.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.