# Builderly API reference

Base URL: http://hristovtintdetailng.com
Generated from the running server on 2026-11-09T17:13:29.278Z. Every mounted route is listed with the access it needs, the parameters its handler reads and the data models it uses.

## Authentication

Send `Authorization: Bearer <token>` where a route needs a token. Add `?ionic=true` to get JSON from routes that also render pages.

- **Admin token** (`admin`): Bearer token of a site admin (Authorization: Bearer <token>).
- **User token** (`user`): Bearer token of a signed-in user of the site.
- **Optional user** (`optional-user`): Works without a token; a user token personalises the answer.
- **User with access** (`user-priv`): A signed-in user whose plan grants access to the item.
- **Page access** (`page-priv`): Pages limited to some users check the token when one is sent.
- **Webhook signature** (`webhook`): Called by a provider; verified by its signature.
- **reCAPTCHA** (`recaptcha`): Needs a reCAPTCHA token from the site form.
- **System** (`system`): Internal - called by the platform itself.

### For AI assistants: getting a token

Public endpoints (Access: Public) need no token. Everything else - changing the site, or reading its orders, bookings, customers and other private data - needs the site owner's API token.

You cannot create a token yourself, and you must not ask for the owner's password. Ask the user for a token instead - you can send them this message as it is:

> To work with your site through its API, I need an API token from you:
> 1. Sign in to your Builderly admin: https://admin.max-media.io
> 2. Open Developers > API reference (or go straight to https://admin.max-media.io/tabs/site-builder/api-docs).
> 3. Press "Generate token", copy the token and paste it here.
> The token acts as you, so only share it in this chat. You can cancel it at any time by signing out of all devices.

Then send it with every request as `Authorization: Bearer <token>`, and add `?ionic=true` to get JSON. Calls go to the site's own address (its domain), not to the reference's.

The token acts as the user: say what you will change and wait for their yes before any request that creates, changes or deletes something, never repeat the token back, and never put it in a link or a file you share.

## Status codes

| Code | Name | Meaning |
| --- | --- | --- |
| 200 | OK | It worked. The answer is the object or list asked for. |
| 201 | Created | The object was created. Some endpoints send it back; others send an empty body. |
| 202 | Accepted | The work was started and finishes in the background - for example a video being processed ({ "status": "processing" }). Check back on the object. |
| 204 | No Content | It worked, and there is nothing to send back - for example after removing a staff member. |
| 301 | Moved Permanently | The address changed; follow the Location header. |
| 400 | Bad Request | The request was refused as sent: a required field is missing, a value has the wrong type or fails validation. The body says what - often as plain text. |
| 401 | Unauthorized | No token, or one that is invalid or signed out. Without ?ionic=true, some endpoints answer this with the HTML login page instead of JSON. |
| 402 | Payment Required | The content needs a subscription: the user has no price plan that unlocks it. |
| 403 | Forbidden | The token is valid but may not do this - the record belongs to someone else, or the user is not an admin. AI builder endpoints also answer 403 when the account is out of credits. |
| 404 | Not Found | No object with that ID or URL slug, or no such endpoint. |
| 409 | Conflict | It clashes with the current state: the item is already being processed, a version is already applied, or an AI plan or preview is no longer available. |
| 410 | Gone | It existed but is no longer there - for example a comment already deleted on the social network. |
| 412 | Precondition Failed | A rule the request must meet is not met - for example push notifications of the same type at least 48 hours apart. |
| 418 | I'm a teapot | An account confirmation or password reset link was used with an email that does not match it. |
| 421 | Misdirected Request | The domain is not a Builderly site. Call the site's own address. |
| 422 | Unprocessable Content | The request was understood but could not be done - for example the AI could not read the website it was asked to clone. The message says what to try instead. |
| 429 | Too Many Requests | Slow down: the site's request limit was reached, an AI chat already has a request running, or the hourly limit of AI search answers is used up. Wait and retry. |
| 500 | Internal Server Error | Something failed on the server. Retrying later may work; if it keeps failing, the request may be one the endpoint does not handle. |
| 502 | Bad Gateway | A service the request depends on failed - for example the address a redirect forwards to. |
| 503 | Service Unavailable | Used by the lead form when an order is below its minimum value, not only for outages: read the message. |

Errors do not share one shape: depending on the endpoint the body is plain text, { "error": "..." }, { "message": "..." } or empty. Rely on the status code, and show the body to the user as the reason.

## Endpoints

### Site settings

The site's settings: its name and contact details, the menu, the home page, publishing and app settings, payments, delivery and taxes.

#### Companion App Settings

##### List all companion app settings
`GET /companion-app-settings`
The companion app settings. Answers an array of every record.
- Access: Admin token
- Status codes: 200, 401, 500

##### Create a companion app setting
`POST /companion-app-settings`
Creates a companion app settings record. Answers 201 with no body.
- Access: Admin token
- Status codes: 201, 400, 401, 500

##### Retrieve a companion app setting
`GET /companion-app-settings/:id`
The companion app settings by id. 404 when there is no such record.
- Access: Admin token
- Path:
  - `id` (string): The ID of the companion app setting.
- Status codes: 200, 401, 404, 500

##### Update a companion app setting
`PATCH /companion-app-settings/:id`
Updates a companion app settings record. Answers the settings, or 404.
- Access: Admin token
- Path:
  - `id` (string): The ID of the companion app setting.
- Status codes: 200, 400, 401, 404, 500

##### Delete a companion app setting
`DELETE /companion-app-settings/:id`
Deletes a companion app settings record. Answers the deleted settings, or 404.
- Access: Admin token
- Path:
  - `id` (string): The ID of the companion app setting.
- Returns: an empty answer on success.
- Status codes: 200, 401, 404, 500

#### Consent

##### Accept an accept consent
`POST /accept-consent`
Log agreement. Logs the click (the consent type and the visitor's IP) for the consent report. Reads no token. Answers 201.
- Access: Public
- Body:
  - `type` (string): The accept consent's type.
- Status codes: 201, 400, 500
- Models: Click

##### Retrieve the consent (deprecated)
`GET /consent`
The cookie consent settings. Reads no token.
- Access: Public
- Returns: the Consent object.
- Status codes: 200, 500
- Models: Consent

##### Create a consent
`POST /consent`
Creates a terms of use record. Answers 201 with no body.
- Access: Admin token
- Returns: the Consent object.
- Status codes: 201, 400, 401, 500
- Models: Consent

##### Retrieve the consent text
`GET /consent-text`
Get the terms of use text. Answers the text only.
- Access: Public
- Status codes: 200, 500
- Models: Consent

##### Retrieve a consent (deprecated)
`GET /consent/:id`
The cookie consent settings by id; visitors read /consent-text. 404 when there is no such record.
- Access: Public
- Path:
  - `id` (string): The ID of the consent.
- Returns: the Consent object.
- Status codes: 200, 404, 500
- Models: Consent

##### Update a consent
`PATCH /consent/:id`
Updates a terms of use record. Answers the settings, or 404.
- Access: Admin token
- Path:
  - `id` (string): The ID of the consent.
- Returns: the Consent object.
- Status codes: 200, 400, 401, 404, 500
- Models: Consent

#### Gdpr

##### Retrieve the GDPR text
`GET /gdpr-text`
Get the terms of use text. Answers the text only. Reads no token.
- Access: Public
- Status codes: 200, 500
- Models: Gdpr

##### List all gdprs (deprecated)
`GET /gdprs`
The privacy (GDPR) settings. The site's one record.
- Access: Admin token
- Returns: a list of Gdpr objects.
- Status codes: 200, 401, 500
- Models: Gdpr

##### Create a gdpr
`POST /gdprs`
Creates a terms of use record. Answers 201 with no body.
- Access: Admin token
- Returns: the Gdpr object.
- Status codes: 201, 400, 401, 500
- Models: Gdpr

##### Retrieve a gdpr (deprecated)
`GET /gdprs/:id`
The privacy settings by id; visitors read /gdpr-text. 404 when there is no such record.
- Access: Public
- Path:
  - `id` (string): The ID of the gdpr.
- Returns: the Gdpr object.
- Status codes: 200, 404, 500
- Models: Gdpr

##### Update a gdpr
`PATCH /gdprs/:id`
Updates a terms of use record. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
- Access: Admin token
- Path:
  - `id` (string): The ID of the gdpr.
- Returns: the Gdpr object.
- Status codes: 200, 400, 401, 404, 500
- Models: Gdpr

#### Home Page Settings

##### List all home page settings
`GET /home-page-settings`
The home page settings. The site's one record.
- Access: Admin token
- Returns: a list of HomePageSettings objects.
- Status codes: 200, 401, 500
- Models: HomePageSettings

##### Update a home page setting
`PATCH /home-page-settings/:id`
Updates the home page settings (useDifferentLayoutForApp). The home page is rendered again on its next visit. Answers the settings.
- Access: Admin token
- Path:
  - `id` (string): The ID of the home page setting.
- Body:
  - `useDifferentLayoutForApp` (boolean): The mobile app shows its own home layout instead of the website's.
- Returns: the HomePageSettings object.
- Status codes: 200, 400, 401, 500
- Models: HomePageSettings

#### Mycontact

##### List all site contacts
`GET /mycontacts`
The site's contact details. Reads no token. The SendGrid key is never included.
- Access: Public
- Status codes: 200, 500
- Models: MyContact

##### Create a site contact
`POST /mycontacts`
Creates a contact details record. A site has one; the AI and admin update it with PATCH instead.
- Access: Admin token
- Status codes: 201, 400, 401, 500
- Models: MyContact

##### Retrieve a site contact
`GET /mycontacts/:id`
The site's contact details by id. 404 when there is no such record.
- Access: Public
- Path:
  - `id` (string): The ID of the site contact.
- Status codes: 200, 404, 500
- Models: MyContact

##### Update a site contact
`PATCH /mycontacts/:id`
Updates a contact details record. Fields outside the allowed list are ignored; the linked Google accounts can only change through their own routes. Saving a SendGrid key switches the site's email to SendGrid, and the key is never sent back. Answers the contact details. The app re-reads its startup data afterwards.
- Access: Admin token
- Path:
  - `id` (string): The ID of the site contact.
- Body:
  - `gmb_location` (string): The site contact's Google Business Profile location.
  - `ga_property` (string): The site contact's Google Analytics property.
  - `google_app` (string): The site contact's google app.
- Status codes: 200, 400, 401, 404, 500
- Models: MyContact

##### Delete a site contact
`DELETE /mycontacts/:id`
Deletes a contact details record. The site needs this record: deleting it breaks pages until a new one is made.
- Access: Admin token
- Path:
  - `id` (string): The ID of the site contact.
- Returns: an empty answer on success.
- Status codes: 200, 401, 404, 500
- Models: MyContact

#### Pwa Settings

##### List all app settings
`GET /pwa-settings`
The installable app (PWA) settings. Answers an array of every record.
- Access: Admin token
- Status codes: 200, 401, 500
- Models: PwaSettings

##### Create an app setting
`POST /pwa-settings`
Creates an installable app settings record. A site has one; update it with PATCH instead. Answers 201.
- Access: Admin token
- Status codes: 201, 400, 401, 500
- Models: PwaSettings

##### Retrieve an app setting
`GET /pwa-settings/:id`
The installable app settings by id. 404 when there is no such record.
- Access: Admin token
- Path:
  - `id` (string): The ID of the app setting.
- Status codes: 200, 401, 404, 500
- Models: PwaSettings

#### Rating Settings

##### List all rating settings
`GET /rating-settings`
Every rating email setting. Reads no token.
- Access: Public
- Returns: a list of RatingSettings objects.
- Status codes: 200, 500
- Models: RatingSettings

##### Create a rating setting
`POST /rating-settings/`
Creates the rating email settings of a kind of item. One per kind of item (type). Answers 201 with it.
- Access: User token
- Returns: the RatingSettings object.
- Status codes: 201, 400, 401, 500
- Models: RatingSettings

##### Update a rating setting
`PATCH /rating-settings/:id`
Updates rating email settings. Answers 200 with no body.
- Access: User token
- Path:
  - `id` (string): The ID of the rating setting.
- Body:
  - `send` (boolean): Rating emails are sent after orders and bookings.
- Returns: the RatingSettings object.
- Status codes: 200, 400, 401, 500
- Models: RatingSettings

##### List all rating settings
`GET /rating-settings/:type`
The rating email settings of a kind of item (product, service...). Null when the kind has none.
- Access: User token
- Path:
  - `type` (string): Product,service, program, priceplan.
- Returns: a list of RatingSettings objects.
- Status codes: 200, 401, 500
- Models: RatingSettings

#### Site Menu

##### List all possible site menus
`GET /all_possible_site_menus`
Everything a navigation entry can link to: categories, pages, price plans and the current entries. Cached for 6 minutes.
- Access: Public
- Returns: a list of SiteMenu objects.
- Status codes: 200, 500
- Models: Collection, AboutPage, PricePlan, SiteMenu

##### List all site menus
`GET /site_menus`
The site's navigation entries. Not sorted: order them by position.
- Access: Public
- Returns: a list of SiteMenu objects.
- Status codes: 200, 500
- Models: SiteMenu

##### Create a site menu
`POST /site_menus`
Creates a navigation entry. Links to the site's own pages are stored as "../<path>" whatever form is sent. Answers 201 with the entry.
- Access: Admin token
- Returns: the SiteMenu object.
- Status codes: 201, 400, 401, 500
- Models: SiteMenu

##### Retrieve a site menu
`GET /site_menus/:id`
One navigation entry. 404 when there is no such entry.
- Access: Public
- Path:
  - `id` (string): The ID of the site menu.
- Returns: the SiteMenu object.
- Status codes: 200, 404, 500
- Models: SiteMenu

##### Update a site menu
`PATCH /site_menus/:id`
Updates a navigation entry. Fields outside the allowed list are ignored. Answers the entry, or 404.
- Access: Admin token
- Path:
  - `id` (string): The ID of the site menu.
- Returns: the SiteMenu object.
- Status codes: 200, 400, 401, 404, 500
- Models: SiteMenu

##### Delete a site menu
`DELETE /site_menus/:id`
Deletes a navigation entry. Answers the deleted entry, or 404.
- Access: Admin token
- Path:
  - `id` (string): The ID of the site menu.
- Returns: an empty answer on success.
- Status codes: 200, 401, 404, 500
- Models: SiteMenu

##### Retrieve the site menu
`GET /site_menus/ionic`
What the app's menu can show: categories, pages, locations and the tracker. Cached for 6 minutes.
- Access: Public
- Status codes: 200, 500
- Models: Collection, AboutPage, Partner, MyContact, Tracker, PricePlan, Voucher, Theme, SocialModeSettings

#### Social Mode Settings

##### List all social mode settings
`GET /social-mode-settings`
The social mode settings. Reads no token: the app reads it at start. With the paywall's price plans.
- Access: Public
- Returns: a list of SocialModeSettings objects.
- Status codes: 200, 500
- Models: SocialModeSettings

##### Create a social mode setting
`POST /social-mode-settings`
Creates a social mode settings record. A site has one; update it with PATCH instead. Answers 201.
- Access: Admin token
- Returns: the SocialModeSettings object.
- Status codes: 201, 400, 401, 500
- Models: SocialModeSettings

##### Update a social mode setting
`PATCH /social-mode-settings/:id`
Updates a social mode settings record. Fields outside the allowed list are ignored. Answers the settings, or 404.
- Access: Admin token
- Path:
  - `id` (string): The ID of the social mode setting.
- Returns: the SocialModeSettings object.
- Status codes: 200, 400, 401, 404, 500
- Models: SocialModeSettings

##### Delete a social mode setting
`DELETE /social-mode-settings/:id`
Deletes a social mode settings record. Answers the deleted record, or 404. Records that point to it are not changed.
- Access: Admin token
- Path:
  - `id` (string): The ID of the social mode setting.
- Returns: an empty answer on success.
- Status codes: 200, 401, 404, 500
- Models: SocialModeSettings

##### Retrieve the unlocked content
`GET /unlocked-content`
Which sections the signed-in user may use, by their professional account. Answers which sections are open, by section.
- Access: Optional user
- Status codes: 200, 500
- Models: SocialModeSettings, ProfessionalAccount

#### Social Moderation Settings

##### Connect the social
`POST /social/connect`
Connects a Facebook page or Instagram account for comment moderation (accessToken, pageId). 400 when the token has no Facebook pages, or not that page. Connecting a different page clears the old page's queue. Answers the settings without the page token.
- Access: User token
- Body:
  - `pageId` (string): The social's page id.
  - `grantedScopes` (string): The social's granted scopes.
  - `deleteComments` (string): The social's delete comments.
- Status codes: 200, 400, 401, 500
- Models: SocialModerationSettings, SocialComment

##### Disconnect the social
`POST /social/disconnect`
Disconnects moderation; deleteComments also removes the stored queue. Answers { connected: false }.
- Access: User token
- Body:
  - `deleteComments` (string): The social's delete comments.
- Status codes: 200, 400, 401, 404, 500
- Models: SocialModerationSettings, SocialComment

##### Retrieve the social
`GET /social/messages-probe`
Returns the social. TEMPORARY. Delete once Instagram messages are settled. Asks Graph the conversations question directly, with the stored Page token and none of our own filtering, across both platforms and both folders. The sync reports zero Instagram conversations while Messenger returns thirteen from the same call and the same token; this shows what Meta actually answers, including the raw error when it refuses rather than returning empty.
- Access: User token
- Status codes: 200, 400, 401, 404, 500
- Models: SocialModerationSettings

##### Retrieve the social
`GET /social/queue`
The moderation queue: every tab's comments and messages in one answer. Answers { byStatus, counts }. ?limit caps each tab.
- Access: User token
- Query:
  - `limit` (string): How many results to return.
- Status codes: 200, 401, 404, 500
- Models: SocialModerationSettings, SocialComment

##### Approve the social
`POST /social/queue/:id/approve`
Applies the action on a queued comment (reply, hide, delete), with an edited reply_message. Acts on Facebook or Instagram at once. 404 when the comment is gone; 400 when it is not waiting for a decision.
- Access: User token
- Path:
  - `id` (string): The ID of the social.
- Body:
  - `reply_message` (string): The social's reply message.
  - `action` (string): The social's action.
- Status codes: 200, 400, 401, 404, 410, 500
- Models: SocialModerationSettings, SocialComment

##### Create a social
`POST /social/queue/:id/regenerate-reply`
Writes a new suggested reply for a queued comment. Answers { reply_message }.
- Access: User token
- Path:
  - `id` (string): The ID of the social.
- Status codes: 200, 400, 401, 404, 500
- Models: SocialModerationSettings, SocialComment

##### Reject the social
`POST /social/queue/:id/reject`
Dismisses a queued comment's suggested action. Answers the comment.
- Access: User token
- Path:
  - `id` (string): The ID of the social.
- Status codes: 200, 400, 401, 404, 500
- Models: SocialComment

##### Undo the social
`POST /social/queue/:id/undo`
Reverses an action taken on a comment, by the AI or a person. 400 "Already undone"; a deleted comment cannot be brought back.
- Access: User token
- Path:
  - `id` (string): The ID of the social.
- Status codes: 200, 400, 401, 404, 500
- Models: SocialModerationSettings, SocialComment

##### List all socials
`GET /social/settings`
The moderation settings. 404 "No Facebook page connected". Never includes the page token.
- Access: User token
- Status codes: 200, 401, 404, 500
- Models: SocialModerationSettings

##### Update the social
`PATCH /social/settings`
Updates the moderation settings; clear_replies_disabled re-arms replying. 404 "No Facebook page connected". Answers the settings.
- Access: User token
- Body:
  - `clear_replies_disabled` (string): The social's clear replies disabled.
- Status codes: 200, 400, 401, 404, 500
- Models: SocialModerationSettings

##### Change the status of a social
`GET /social/status`
Whether moderation is connected, its plan and how many comments wait. Answers { connected: false, plan } when nothing is connected; never includes the page token.
- Access: User token
- Status codes: 200, 401, 500
- Models: SocialModerationSettings, SocialComment

##### Sync the social
`POST /social/sync`
Pull the page's recent comments now, instead of waiting for the. scheduled run. Same function the cron calls, so a manual sync and an automatic one cannot drift apart.
- Access: User token
- Status codes: 200, 400, 401, 402, 404, 500
- Models: SocialModerationSettings

#### AI builder

##### Generate a privacy policy with AI
`POST /generate-privacy-policy`
AI: writes the site's privacy policy page. Answers { action: 'JOB', async_job }; the page is written from the site's contact details and what it sells.
- Access: Admin token
- Body:
  - `prompt` (string): What the AI should do with the privacy policy, in plain words - any language.
  - `chatId` (string): The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
  - `aiVersion` (string): Which version of the AI builder to use; leave it out for the current one.
  - `socketId` (string): The privacy policy's socket id.
  - `include_consent` (string): Whether to also create the cookie consent banner and link it to this privacy policy.
- Status codes: 200, 401, 500

## Objects

### AboutPage

A page built in the editor or by the AI builder. Its content is in containers: each container is a full-width section with columns, and each column has components, laid out on a 12-column grid by their size.

- `requiresLogin`: Boolean, default false - Only signed-in users can see the page.
- `requiresSubscription`: Boolean, default false - Only subscribers of one of price_plan_ids can see the page.
- `price_plan_ids`: String[] - The price plans whose subscribers can see the page, with requiresSubscription.
- `title`: String, required - The page's title, shown in the browser tab and in the admin.
- `url`: String, required - The page's address on the site: /<url>. Unique.
- `redirectUrl`: String - When set, visitors who open the page are sent to this address instead.
- `legal_kind`: String - For legal pages: which document it is, in English (Privacy Policy, Terms of Service...).
- `isPartial`: Boolean, default false - A part of other pages (a banner, a block inside a product page), not a page of its own.
- `showTo`: String, default "0" - Who sees the page: "0" everyone, "1" signed-in users only, "2" visitors who are not signed in.
- `showHeader`: Boolean, default true - Show the site's header on the page.
- `showFooter`: Boolean, default true - Show the site's footer on the page.
- `ai_context_v2`: Mixed - Legacy, no longer written: the AI context is built on demand. Old copies are not selected and are removed by npm run migrate:strip-about-page-ai-context.
- `ai_surfaces_v2`: Mixed - The editable regions the AI page modifier found on the page last time it read it; written by the AI builder.
- `ai_overview`: String - A short summary of the page the AI builder keeps for its own use.
- `ai_generation_metadata`: Mixed - How the AI builder generated the page (mode, prompt, timings); written by the AI builder.
- `containers`: Object[] - The page's content: sections, each with columns of components.
  - `isFluid`: Boolean, default false
  - `parallaxEnabled`: Boolean
  - `parallaxAmount`: Number
  - `parallaxZoom`: Number
  - `continuousEnabled`: Boolean, default false
  - `continuousEffect`: String, default "none"
  - `continuousDuration`: Number, default 2400
  - `continuousIntensity`: Number, default 4
  - `backgroundImage`: String
  - `backgroundSize`: String
  - `backgroundPosition`: String
  - `backgroundRepeat`: String
  - `backgroundVideo`: String
  - `backgroundColor`: String
  - `backgroundGradient.enabled`: Boolean, default false
  - `backgroundGradient.type`: String
  - `backgroundGradient.degrees`: Number
  - `backgroundGradient.radialShape`: String
  - `backgroundGradient.radialPosition`: String
  - `backgroundGradient.colors`: Object[]
    - `color`: String
    - `percentage`: Number
    - `_id`: ObjectId
  - `backgroundGradient.css`: String
  - `backgroundParallax`: Boolean, default false
  - `minHeight`: Number
  - `minHeightMobile`: Number
  - `padding_top.value`: String, default ""
  - `padding_top.unit`: String, default "px"
  - `padding_top.mobile_value`: String, default ""
  - `padding_top.mobile_unit`: String, default "px"
  - `padding_right.value`: String, default ""
  - `padding_right.unit`: String, default "px"
  - `padding_right.mobile_value`: String, default ""
  - `padding_right.mobile_unit`: String, default "px"
  - `padding_bottom.value`: String, default ""
  - `padding_bottom.unit`: String, default "px"
  - `padding_bottom.mobile_value`: String, default ""
  - `padding_bottom.mobile_unit`: String, default "px"
  - `padding_left.value`: String, default ""
  - `padding_left.unit`: String, default "px"
  - `padding_left.mobile_value`: String, default ""
  - `padding_left.mobile_unit`: String, default "px"
  - `allowOffset`: Boolean, default false
  - `offsetX`: Number, default 0
  - `offsetY`: Number, default 0
  - `offsetMobileX`: Number, default 0
  - `offsetMobileY`: Number, default 0
  - `zIndex`: Number, default 0
  - `wrap_reverse`: Boolean, default false
  - `borderRadius`: Number, default 0
  - `marginX`: Number, default 0
  - `editorName`: String
  - `horizontalScroll`: Boolean, default false
  - `horizontalScrollWidth`: Number, default 100
  - `overflowX`: String, default "hidden"
  - `columns`: Object[]
    - `size`: String
    - `hoverGroup`: Boolean
    - `parallaxEnabled`: Boolean
    - `parallaxAmount`: Number
    - `parallaxZoom`: Number
    - `continuousEnabled`: Boolean, default false
    - `continuousEffect`: String, default "none"
    - `continuousDuration`: Number, default 2400
    - `continuousIntensity`: Number, default 4
    - `sticky`: Boolean, default false
    - `justify`: String
    - `align`: String
    - `onHoverActions`: Boolean, default false
    - `onHoverTransition`: Number, default 0.3
    - `backgroundColor`: String
    - `backgroundGradient.enabled`: Boolean, default false
    - `backgroundGradient.type`: String
    - `backgroundGradient.degrees`: Number
    - `backgroundGradient.radialShape`: String
    - `backgroundGradient.radialPosition`: String
    - `backgroundGradient.colors`: Object[]
      - `color`: String
      - `percentage`: Number
      - `_id`: ObjectId
    - `backgroundGradient.css`: String
    - `backgroundColorOnHover`: String
    - `innerBackgroundColor`: String
    - `innerBackgroundGradient.enabled`: Boolean, default false
    - `innerBackgroundGradient.type`: String
    - `innerBackgroundGradient.degrees`: Number
    - `innerBackgroundGradient.radialShape`: String
    - `innerBackgroundGradient.radialPosition`: String
    - `innerBackgroundGradient.colors`: Object[]
      - `color`: String
      - `percentage`: Number
      - `_id`: ObjectId
    - `innerBackgroundGradient.css`: String
    - `innerBackgroundColorOnHover`: String
    - `backgroundImage`: String
    - `backgroundSize`: String
    - `backgroundPosition`: String
    - `backgroundRepeat`: String
    - `backgroundVideo`: String
    - `paddingX`: Number, default 0
    - `paddingXOnHover`: Number, default 0
    - `paddingY`: Number, default 0
    - `paddingYOnHover`: Number, default 0
    - `innerPaddingX`: Number, default 0
    - `innerPaddingXOnHover`: Number, default 0
    - `innerPaddingY`: Number, default 0
    - `allowOffset`: Boolean, default false
    - `offsetX`: Number, default 0
    - `offsetY`: Number, default 0
    - `offsetMobileX`: Number, default 0
    - `offsetMobileY`: Number, default 0
    - `zIndex`: Number, default 0
    - `innerPaddingYOnHover`: Number, default 0
    - `paddingOptions`: String
    - `paddingOptionsOnHover`: String
    - `innerPaddingOptions`: String
    - `borderOptions`: String
    - `borderOptionsOnHover`: String
    - `card`: Boolean, default false
    - `borderRadius`: Number, default 0
    - `borderRadiusOnHover`: Number, default 0
    - `borderType`: String, default "none"
    - `borderTypeOnHover`: String, default "none"
    - `borderWidth`: Number, default 0
    - `borderWidthOnHover`: Number, default 0
    - `borderColor`: String, default ""
    - `borderColorOnHover`: String, default ""
    - `components`: Object[]
      - `type`: String
      - `size`: String, default "12"
      - `sticky`: Boolean, default false
      - `paddingX`: Number, default 0
      - `paddingY`: Number, default 0
      - `allowOffset`: Boolean, default false
      - `offsetX`: Number, default 0
      - `offsetY`: Number, default 0
      - `offsetMobileX`: Number, default 0
      - `offsetMobileY`: Number, default 0
      - `zIndex`: Number, default 0
      - `position`: String, one of static | relative | absolute | fixed | sticky, default "static"
      - `top.value`: String, default "0"
      - `top.unit`: String, default "px"
      - `top.mobile_value`: String, default ""
      - `top.mobile_unit`: String, default "px"
      - `left.value`: String, default "0"
      - `left.unit`: String, default "px"
      - `left.mobile_value`: String, default ""
      - `left.mobile_unit`: String, default "px"
      - `right.value`: String, default "0"
      - `right.unit`: String, default "px"
      - `right.mobile_value`: String, default ""
      - `right.mobile_unit`: String, default "px"
      - `bottom.value`: String, default "0"
      - `bottom.unit`: String, default "px"
      - `bottom.mobile_value`: String, default ""
      - `bottom.mobile_unit`: String, default "px"
      - `custom_measurements`: Boolean, default false
      - `edit_type`: String, default "simple"
      - `custom_width.value`: Mixed
      - `custom_width.unit`: String, default "px"
      - `custom_width.mobile_value`: Mixed
      - `custom_width.mobile_unit`: String, default "px"
      - `custom_min_width.value`: Mixed
      - `custom_min_width.unit`: String, default "px"
      - `custom_min_width.mobile_value`: Mixed
      - `custom_min_width.mobile_unit`: String, default "px"
      - `custom_max_width.value`: Mixed
      - `custom_max_width.unit`: String, default "px"
      - `custom_max_width.mobile_value`: Mixed
      - `custom_max_width.mobile_unit`: String, default "px"
      - `custom_height.value`: Mixed
      - `custom_height.unit`: String, default "px"
      - `custom_height.mobile_value`: Mixed
      - `custom_height.mobile_unit`: String, default "px"
      - `custom_min_height.value`: Mixed
      - `custom_min_height.unit`: String, default "px"
      - `custom_min_height.mobile_value`: Mixed
      - `custom_min_height.mobile_unit`: String, default "px"
      - `custom_max_height.value`: Mixed
      - `custom_max_height.unit`: String, default "px"
      - `custom_max_height.mobile_value`: Mixed
      - `custom_max_height.mobile_unit`: String, default "px"
      - `object_fit`: String, default "none"
      - `aspect_ratio.custom`: Boolean, default false
      - `aspect_ratio.ratio`: String, default ""
      - `min_height`: Number, default 0
      - `margin_left.value`: Mixed
      - `margin_left.unit`: String, default "px"
      - `margin_left.mobile_value`: Mixed
      - `margin_left.mobile_unit`: String, default "px"
      - `margin_right.value`: Mixed
      - `margin_right.unit`: String, default "px"
      - `margin_right.mobile_value`: Mixed
      - `margin_right.mobile_unit`: String, default "px"
      - `margin_top.value`: Mixed
      - `margin_top.unit`: String, default "px"
      - `margin_top.mobile_value`: Mixed
      - `margin_top.mobile_unit`: String, default "px"
      - `margin_bottom.value`: Mixed
      - `margin_bottom.unit`: String, default "px"
      - `margin_bottom.mobile_value`: Mixed
      - `margin_bottom.mobile_unit`: String, default "px"
      - `padding_left.value`: Mixed
      - `padding_left.unit`: String, default "px"
      - `padding_left.mobile_value`: Mixed
      - `padding_left.mobile_unit`: String, default "px"
      - `padding_right.value`: Mixed
      - `padding_right.unit`: String, default "px"
      - `padding_right.mobile_value`: Mixed
      - `padding_right.mobile_unit`: String, default "px"
      - `padding_top.value`: Mixed
      - `padding_top.unit`: String, default "px"
      - `padding_top.mobile_value`: Mixed
      - `padding_top.mobile_unit`: String, default "px"
      - `padding_bottom.value`: Mixed
      - `padding_bottom.unit`: String, default "px"
      - `padding_bottom.mobile_value`: Mixed
      - `padding_bottom.mobile_unit`: String, default "px"
      - `border_left.color`: String
      - `border_left.width.value`: Mixed
      - `border_left.width.unit`: String, default "px"
      - `border_left.style`: String
      - `border_right.color`: String
      - `border_right.width.value`: Mixed
      - `border_right.width.unit`: String, default "px"
      - `border_right.style`: String
      - `border_top.color`: String
      - `border_top.width.value`: Mixed
      - `border_top.width.unit`: String, default "px"
      - `border_top.style`: String
      - `border_bottom.color`: String
      - `border_bottom.width.value`: Mixed
      - `border_bottom.width.unit`: String, default "px"
      - `border_bottom.style`: String
      - `border_top_left_radius.value`: Mixed
      - `border_top_left_radius.unit`: String, default "px"
      - `border_top_right_radius.value`: Mixed
      - `border_top_right_radius.unit`: String, default "px"
      - `border_bottom_left_radius.value`: Mixed
      - `border_bottom_left_radius.unit`: String, default "px"
      - `border_bottom_right_radius.value`: Mixed
      - `border_bottom_right_radius.unit`: String, default "px"
      - `custom_border_radius.value`: Number
      - `custom_border_radius.unit`: String, default "px"
      - `specific_border_radius`: Boolean, default false
      - `box_shadows`: Object[]
      - `mix_blend_mode`: String, one of normal | multiply | screen | overlay | darken | lighten | color-dodge | color-burn | hard-light | soft-light | difference | exclusion | hue | saturation | color | luminosity, default "normal"
      - `paddingOptions`: String
      - `backgroundColor`: String
      - `backgroundGradient.enabled`: Boolean, default false
      - `backgroundGradient.type`: String
      - `backgroundGradient.degrees`: Number
      - `backgroundGradient.radialShape`: String
      - `backgroundGradient.radialPosition`: String
      - `backgroundGradient.colors`: Object[]
      - `backgroundGradient.css`: String
      - `card`: Boolean, default false
      - `borderRadius`: Number, default 0
      - `borderType`: String, default "none"
      - `borderWidth`: Number, default 0
      - `borderColor`: String, default ""
      - `borderOptions`: String
      - `showOnMobile`: Boolean, default true
      - `showOnDesktop`: Boolean, default true
      - `icon`: String
      - `iconSettings.size`: Number, default 40
      - `iconSettings.color`: String, default "var(--ion-color-primary)"
      - `heading`: String
      - `subHeading`: String
      - `heading_alignment`: String
      - `innerHTML`: String
      - `innerCSS`: String
      - `innerJS`: String
      - `lineHeight`: String, default "normal"
      - `medias`: Object[]
      - `products`: ObjectId[], → Product
      - `product_gallery.design_layout`: String, default ""
      - `product_gallery.mode`: String, default "card"
      - `product_gallery.columns`: Number, default 3
      - `product_gallery.placeholderItems`: Object[]
      - `product_gallery.placeholderPlateColor`: String, default ""
      - `product_gallery.showName`: Boolean, default true
      - `product_gallery.showPrice`: Boolean, default true
      - `product_gallery.showDescription`: Boolean, default false
      - `product_gallery.showBrand`: Boolean, default false
      - `product_gallery.showRibbon`: Boolean, default false
      - `product_gallery.showRating`: Boolean, default false
      - `product_gallery.showCart`: Boolean, default false
      - `product_gallery.showLink`: Boolean, default false
      - `product_gallery.linkLabel`: String, default "View product"
      - `product_gallery.imageAspectRatio`: String, default "1/1"
      - `product_gallery.imageHeight`: Number, default 260
      - `product_gallery.imageRadius`: Number, default 20
      - `product_gallery.imageObjectFit`: String, default "cover"
      - `product_gallery.cardBackgroundColor`: String, default "var(--ion-card-background, #ffffff)"
      - `product_gallery.cardBorderRadius`: Number, default 28
      - `product_gallery.cardBorderWidth`: Number, default 0
      - `product_gallery.cardBorderColor`: String, default "transparent"
      - `product_gallery.cardPaddingX`: Number, default 20
      - `product_gallery.cardPaddingY`: Number, default 20
      - `product_gallery.gap`: Number, default 24
      - `product_gallery.boxShadowColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.22)"
      - `product_gallery.boxShadowOffsetY`: Number, default 20
      - `product_gallery.boxShadowBlurRadius`: Number, default 40
      - `product_gallery.boxShadowSpreadRadius`: Number, default -22
      - `product_gallery.fieldBackground`: String, default "transparent"
      - `product_gallery.hairlineColor`: String, default "transparent"
      - `product_gallery.hairlineWidth`: Number, default 0
      - `product_gallery.maxWidth`: Number, default 0
      - `product_gallery.scrimGradient`: String, default ""
      - `product_gallery.align`: String, default "left"
      - `product_gallery.accentColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `product_gallery.nameColor`: String, default "var(--ion-text-color, #1e293b)"
      - `product_gallery.nameFontSize`: String, default "1em"
      - `product_gallery.nameFontWeight`: String, default "700"
      - `product_gallery.nameFontFamily`: String, default ""
      - `product_gallery.nameTransform`: String, default "none"
      - `product_gallery.priceColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `product_gallery.priceFontSize`: String, default "0.94em"
      - `product_gallery.priceFontWeight`: String, default "600"
      - `product_gallery.priceFontFamily`: String, default ""
      - `product_gallery.priceFontStyle`: String, default "normal"
      - `product_gallery.metaColor`: String, default "rgba(var(--ion-text-color-rgb, 30,41,59), 0.66)"
      - `product_gallery.titlePosition`: String, default "bottom"
      - `product_gallery.imageSide`: String, default "left"
      - `product_gallery.imagePadding`: Number, default 0
      - `product_gallery.boxShadowOffsetX`: Number, default 0
      - `product_gallery.descFontSize`: String, default "13px"
      - `product_gallery.descFontWeight`: String, default "400"
      - `product_gallery.animation`: String, default "none"
      - `product_gallery.animationDuration`: Number, default 0
      - `product_gallery.animationDelay`: Number, default 0
      - `product_gallery.showCustomFields`: Boolean, default false
      - `product_gallery.cardDesign`: String, default ""
      - `product_gallery.carouselLoop`: Boolean, default false
      - `product_gallery.carouselControls`: Boolean, default false
      - `product_gallery.customCss`: String, default ""
      - `services`: ObjectId[], → Service
      - `service_gallery.design_layout`: String, default ""
      - `service_gallery.mode`: String, default "card"
      - `service_gallery.columns`: Number, default 3
      - `service_gallery.placeholderItems`: Object[]
      - `service_gallery.placeholderPlateColor`: String, default ""
      - `service_gallery.showTitle`: Boolean, default true
      - `service_gallery.showPrice`: Boolean, default true
      - `service_gallery.showDescription`: Boolean, default false
      - `service_gallery.showDuration`: Boolean, default false
      - `service_gallery.durationLabel`: String, default "min"
      - `service_gallery.showImage`: Boolean, default true
      - `service_gallery.showLink`: Boolean, default false
      - `service_gallery.linkLabel`: String, default "View service"
      - `service_gallery.imageAspectRatio`: String, default "1/1"
      - `service_gallery.imageHeight`: Number, default 260
      - `service_gallery.imageRadius`: Number, default 20
      - `service_gallery.imageObjectFit`: String, default "cover"
      - `service_gallery.cardBackgroundColor`: String, default "var(--ion-card-background, #ffffff)"
      - `service_gallery.cardBorderRadius`: Number, default 28
      - `service_gallery.cardBorderWidth`: Number, default 0
      - `service_gallery.cardBorderColor`: String, default "transparent"
      - `service_gallery.cardPaddingX`: Number, default 20
      - `service_gallery.cardPaddingY`: Number, default 20
      - `service_gallery.gap`: Number, default 24
      - `service_gallery.boxShadowColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.22)"
      - `service_gallery.boxShadowOffsetY`: Number, default 20
      - `service_gallery.boxShadowBlurRadius`: Number, default 40
      - `service_gallery.boxShadowSpreadRadius`: Number, default -22
      - `service_gallery.fieldBackground`: String, default "transparent"
      - `service_gallery.hairlineColor`: String, default "transparent"
      - `service_gallery.hairlineWidth`: Number, default 0
      - `service_gallery.rowRuleColor`: String, default "transparent"
      - `service_gallery.rowRuleWidth`: Number, default 0
      - `service_gallery.maxWidth`: Number, default 0
      - `service_gallery.scrimGradient`: String, default ""
      - `service_gallery.align`: String, default "left"
      - `service_gallery.accentColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `service_gallery.titleColor`: String, default "var(--ion-text-color, #1e293b)"
      - `service_gallery.titleFontSize`: String, default "1em"
      - `service_gallery.titleFontWeight`: String, default "700"
      - `service_gallery.titleFontFamily`: String, default ""
      - `service_gallery.titleTransform`: String, default "none"
      - `service_gallery.priceColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `service_gallery.priceFontSize`: String, default "0.94em"
      - `service_gallery.priceFontWeight`: String, default "600"
      - `service_gallery.priceFontFamily`: String, default ""
      - `service_gallery.priceFontStyle`: String, default "normal"
      - `service_gallery.metaColor`: String, default "rgba(var(--ion-text-color-rgb, 30,41,59), 0.66)"
      - `service_gallery.titlePosition`: String, default "bottom"
      - `service_gallery.imageSide`: String, default "left"
      - `service_gallery.imagePadding`: Number, default 0
      - `service_gallery.boxShadowOffsetX`: Number, default 0
      - `service_gallery.descFontSize`: String, default "13px"
      - `service_gallery.descFontWeight`: String, default "400"
      - `service_gallery.animation`: String, default "none"
      - `service_gallery.animationDuration`: Number, default 0
      - `service_gallery.animationDelay`: Number, default 0
      - `service_gallery.showCustomFields`: Boolean, default false
      - `service_gallery.cardDesign`: String, default ""
      - `service_gallery.carouselLoop`: Boolean, default false
      - `service_gallery.carouselControls`: Boolean, default false
      - `service_gallery.customCss`: String, default ""
      - `blog_gallery.design_layout`: String, default ""
      - `blog_gallery.mode`: String, default "card"
      - `blog_gallery.columns`: Number, default 3
      - `blog_gallery.leadLayout`: String, default "beside"
      - `blog_gallery.leadWidth`: Number, default 58
      - `blog_gallery.placeholderItems`: Object[]
      - `blog_gallery.placeholderPlateColor`: String, default ""
      - `blog_gallery.showTitle`: Boolean, default true
      - `blog_gallery.showExcerpt`: Boolean, default false
      - `blog_gallery.showDate`: Boolean, default true
      - `blog_gallery.showImage`: Boolean, default true
      - `blog_gallery.showLink`: Boolean, default false
      - `blog_gallery.linkLabel`: String, default "Read more"
      - `blog_gallery.showCustomFields`: Boolean, default false
      - `blog_gallery.imageAspectRatio`: String, default "1/1"
      - `blog_gallery.imageHeight`: Number, default 260
      - `blog_gallery.imageRadius`: Number, default 20
      - `blog_gallery.imageObjectFit`: String, default "cover"
      - `blog_gallery.imagePadding`: Number, default 0
      - `blog_gallery.imageSide`: String, default "left"
      - `blog_gallery.cardBackgroundColor`: String, default "var(--ion-card-background, #ffffff)"
      - `blog_gallery.cardBorderRadius`: Number, default 28
      - `blog_gallery.cardBorderWidth`: Number, default 0
      - `blog_gallery.cardBorderColor`: String, default "transparent"
      - `blog_gallery.cardPaddingX`: Number, default 20
      - `blog_gallery.cardPaddingY`: Number, default 20
      - `blog_gallery.gap`: Number, default 24
      - `blog_gallery.boxShadowColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.22)"
      - `blog_gallery.boxShadowOffsetX`: Number, default 0
      - `blog_gallery.boxShadowOffsetY`: Number, default 20
      - `blog_gallery.boxShadowBlurRadius`: Number, default 40
      - `blog_gallery.boxShadowSpreadRadius`: Number, default -22
      - `blog_gallery.fieldBackground`: String, default "transparent"
      - `blog_gallery.hairlineColor`: String, default "transparent"
      - `blog_gallery.hairlineWidth`: Number, default 0
      - `blog_gallery.rowRuleColor`: String, default "transparent"
      - `blog_gallery.rowRuleWidth`: Number, default 0
      - `blog_gallery.maxWidth`: Number, default 0
      - `blog_gallery.scrimGradient`: String, default ""
      - `blog_gallery.align`: String, default "left"
      - `blog_gallery.accentColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `blog_gallery.titleColor`: String, default "var(--ion-text-color, #1e293b)"
      - `blog_gallery.titleFontSize`: String, default "1em"
      - `blog_gallery.titleFontWeight`: String, default "700"
      - `blog_gallery.titleFontFamily`: String, default ""
      - `blog_gallery.titleTransform`: String, default "none"
      - `blog_gallery.dateColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `blog_gallery.dateFontSize`: String, default "0.81em"
      - `blog_gallery.dateFontWeight`: String, default "600"
      - `blog_gallery.dateFontFamily`: String, default ""
      - `blog_gallery.dateFontStyle`: String, default "normal"
      - `blog_gallery.metaColor`: String, default "rgba(var(--ion-text-color-rgb, 30,41,59), 0.66)"
      - `blog_gallery.excerptFontSize`: String, default "0.88em"
      - `blog_gallery.excerptFontWeight`: String, default "400"
      - `blog_gallery.excerptFontFamily`: String, default ""
      - `blog_gallery.titlePosition`: String, default "bottom"
      - `blog_gallery.animation`: String, default "none"
      - `blog_gallery.animationDuration`: Number, default 0
      - `blog_gallery.animationDelay`: Number, default 0
      - `blog_gallery.cardDesign`: String, default ""
      - `blog_gallery.customCss`: String, default ""
      - `multi_booking.layout`: String, default "chips"
      - `multi_booking.columns`: Number, default 3
      - `multi_booking.pickerBackground`: String, default "transparent"
      - `multi_booking.gap`: Number, default 10
      - `multi_booking.align`: String, default "left"
      - `multi_booking.showPrice`: Boolean, default false
      - `multi_booking.showDuration`: Boolean, default false
      - `multi_booking.showDescription`: Boolean, default false
      - `multi_booking.showImage`: Boolean, default false
      - `multi_booking.itemPaddingX`: Number, default 18
      - `multi_booking.itemPaddingY`: Number, default 10
      - `multi_booking.itemRadius`: Number, default 100
      - `multi_booking.itemBorderWidth`: Number, default 0
      - `multi_booking.itemBorderColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.12)"
      - `multi_booking.itemBackground`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.10)"
      - `multi_booking.itemTextColor`: String, default "var(--ion-text-color, inherit)"
      - `multi_booking.itemSubTextColor`: String, default "var(--ion-color-medium, rgba(0,0,0,0.55))"
      - `multi_booking.selectedBackground`: String, default "var(--ion-color-primary)"
      - `multi_booking.selectedTextColor`: String, default "var(--ion-color-primary-contrast, #ffffff)"
      - `multi_booking.selectedSubTextColor`: String, default "rgba(var(--ion-color-primary-contrast-rgb, 255,255,255), 0.75)"
      - `multi_booking.selectedBorderColor`: String, default "var(--ion-color-primary)"
      - `multi_booking.hoverBackground`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.18)"
      - `multi_booking.titleFontSize`: Number, default 14
      - `multi_booking.titleFontWeight`: String, default "500"
      - `multi_booking.subFontSize`: Number, default 13
      - `multi_booking.dividerColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.12)"
      - `multi_booking.dividerWidth`: Number, default 1
      - `multi_booking.autoScroll`: Boolean, default true
      - `multi_booking.cardBackground`: String, default "var(--ion-card-color, #ffffff)"
      - `multi_booking.cardRadius`: Number, default 28
      - `multi_booking.cardBorderWidth`: Number, default 0
      - `multi_booking.cardBorderColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.12)"
      - `multi_booking.cardMaxWidth`: Number, default 820
      - `multi_booking.cardLayout`: String, default "stack"
      - `multi_booking.splitWidth`: Number, default 340
      - `multi_booking.shadowColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.18)"
      - `multi_booking.shadowOffsetY`: Number, default 20
      - `multi_booking.shadowBlur`: Number, default 40
      - `multi_booking.shadowSpread`: Number, default -22
      - `multi_booking.sectionPaddingX`: Number, default 40
      - `multi_booking.sectionPaddingY`: Number, default 32
      - `multi_booking.sectionDividerColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.12)"
      - `multi_booking.sectionDividerWidth`: Number, default 1
      - `multi_booking.showStepLabels`: Boolean, default true
      - `multi_booking.serviceStepLabel`: String, default "Step 1 — Service"
      - `multi_booking.dayStepLabel`: String, default "Step 2 — Day"
      - `multi_booking.staffStepLabel`: String, default "Step 3 — Staff member"
      - `multi_booking.timeStepLabel`: String, default "Step 4 — Time"
      - `multi_booking.stepLabelColor`: String, default "var(--ion-color-medium, rgba(0,0,0,0.55))"
      - `multi_booking.stepLabelSize`: Number, default 13
      - `multi_booking.stepLabelWeight`: String, default "700"
      - `multi_booking.stepLabelSpacing`: Number, default 0.04
      - `multi_booking.stepLabelUppercase`: Boolean, default true
      - `multi_booking.dayCount`: Number, default 6
      - `multi_booking.dayLayout`: String, default "strip"
      - `multi_booking.dayBorderColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.15)"
      - `multi_booking.dayShape`: String, default "circle"
      - `multi_booking.daySize`: Number, default 64
      - `multi_booking.dayGap`: Number, default 10
      - `multi_booking.dayShowWeekday`: Boolean, default false
      - `multi_booking.dayBackground`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.10)"
      - `multi_booking.dayTextColor`: String, default "var(--ion-text-color, inherit)"
      - `multi_booking.daySelectedBackground`: String, default "var(--ion-color-primary)"
      - `multi_booking.daySelectedTextColor`: String, default "var(--ion-color-primary-contrast, #ffffff)"
      - `multi_booking.dayDisabledOpacity`: Number, default 0.35
      - `multi_booking.timeGap`: Number, default 10
      - `multi_booking.timeRadius`: Number, default 100
      - `multi_booking.timeBorderWidth`: Number, default 0
      - `multi_booking.timeBorderColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.15)"
      - `multi_booking.timeSelectedBorderColor`: String, default "var(--ion-color-primary)"
      - `multi_booking.timePaddingX`: Number, default 18
      - `multi_booking.timePaddingY`: Number, default 10
      - `multi_booking.timeBackground`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.10)"
      - `multi_booking.timeTextColor`: String, default "var(--ion-text-color, inherit)"
      - `multi_booking.timeSelectedBackground`: String, default "var(--ion-color-primary)"
      - `multi_booking.timeSelectedTextColor`: String, default "var(--ion-color-primary-contrast, #ffffff)"
      - `multi_booking.buttonText`: String, default "Confirm my booking"
      - `multi_booking.buttonBackground`: String, default "var(--ion-color-primary)"
      - `multi_booking.buttonTextColor`: String, default "var(--ion-color-primary-contrast, #ffffff)"
      - `multi_booking.buttonRadius`: Number, default 100
      - `multi_booking.buttonPaddingY`: Number, default 16
      - `multi_booking.buttonFontSize`: Number, default 15
      - `multi_booking.buttonFontWeight`: String, default "700"
      - `multi_booking.buttonFullWidth`: Boolean, default true
      - `blogposts`: ObjectId[], → BlogPost
      - `videos`: ObjectId[], → Video
      - `price_plans`: ObjectId[], → PricePlan
      - `href`: String, default "#"
      - `router_link`: String
      - `buttonOptions.fill`: String
      - `buttonOptions.expand`: String
      - `buttonOptions.size`: String
      - `buttonOptions.color`: String
      - `buttonOptions.class`: String
      - `buttonOptions.customColor`: String
      - `buttonOptions.customColorContrast`: String
      - `buttonOptions.customColorHover`: String
      - `buttonOptions.hoverRoll`: Boolean
      - `buttonOptions.fontWeight`: Number
      - `buttonOptions.letterSpacing`: Number
      - `buttonOptions.fontSize`: Number, default 14
      - `buttonOptions.borderRadius`: Number, default 6
      - `buttonOptions.customColorA`: String
      - `buttonOptions.customColorB`: String
      - `buttonOptions.customColorC`: String
      - `buttonOptions.custom_measurements`: Boolean, default false
      - `buttonOptions.height.value`: String
      - `buttonOptions.height.unit`: String
      - `buttonOptions.width.value`: String
      - `buttonOptions.width.unit`: String
      - `carousel.showArrows`: Boolean, default true
      - `carousel.showIndicators`: Boolean, default true
      - `carousel.height`: Number, default 90
      - `carousel.automaticHeight`: Boolean, default true
      - `carousel.carouselMedias`: Object[]
      - `map`: String
      - `contactForm.name`: String
      - `contactForm.email`: String
      - `contactForm.subject`: String
      - `contactForm.body`: String
      - `contactForm.button`: String
      - `contactForm.hideNewsletter`: Boolean
      - `contactForm.placeholders.name`: String
      - `contactForm.placeholders.email`: String
      - `contactForm.placeholders.subject`: String
      - `contactForm.placeholders.body`: String
      - `contactForm.style.backgroundColor`: String
      - `contactForm.style.textColor`: String
      - `contactForm.style.accentColor`: String
      - `contactForm.style.border.color`: String
      - `contactForm.style.border.width.value`: Mixed
      - `contactForm.style.border.width.unit`: String
      - `contactForm.style.border.style`: String
      - `contactForm.style.borderRadius.value`: Mixed
      - `contactForm.style.borderRadius.unit`: String
      - `contactForm.style.padding.value`: Mixed
      - `contactForm.style.padding.unit`: String
      - `contactForm.style.labelFontSize.value`: Mixed
      - `contactForm.style.labelFontSize.unit`: String
      - `contactForm.style.consentFontSize.value`: Mixed
      - `contactForm.style.consentFontSize.unit`: String
      - `contactForm.style.inputBackgroundColor`: String
      - `contactForm.style.inputTextColor`: String
      - `contactForm.style.placeholderColor`: String
      - `contactForm.style.inputFocusColor`: String
      - `contactForm.style.inputFontSize.value`: Mixed
      - `contactForm.style.inputFontSize.unit`: String
      - `contactForm.style.inputPadding.value`: Mixed
      - `contactForm.style.inputPadding.unit`: String
      - `contactForm.style.textareaMinHeight.value`: Mixed
      - `contactForm.style.textareaMinHeight.unit`: String
      - `contactForm.style.inputMargin.value`: Mixed
      - `contactForm.style.inputMargin.unit`: String
      - `contactForm.style.inputBorder.color`: String
      - `contactForm.style.inputBorder.width.value`: Mixed
      - `contactForm.style.inputBorder.width.unit`: String
      - `contactForm.style.inputBorder.style`: String
      - `contactForm.style.inputBorderRadius.value`: Mixed
      - `contactForm.style.inputBorderRadius.unit`: String
      - `contactForm.style.buttonBackgroundColor`: String
      - `contactForm.style.buttonTextColor`: String
      - `contactForm.style.buttonAlign`: String
      - `contactForm.style.buttonFontSize.value`: Mixed
      - `contactForm.style.buttonFontSize.unit`: String
      - `contactForm.style.buttonBorder.color`: String
      - `contactForm.style.buttonBorder.width.value`: Mixed
      - `contactForm.style.buttonBorder.width.unit`: String
      - `contactForm.style.buttonBorder.style`: String
      - `contactForm.style.buttonBorderRadius.value`: Mixed
      - `contactForm.style.buttonBorderRadius.unit`: String
      - `contactForm.style.buttonWidth.value`: Mixed
      - `contactForm.style.buttonWidth.unit`: String
      - `contactForm.additional`: Object[]
      - `instagram.columns`: Number
      - `instagram.first`: Number
      - `instagram.skip`: Number
      - `instagram.showInfo`: Boolean
      - `instagram.gridType`: Number
      - `instagram.profile`: String
      - `facebook.url`: String
      - `facebook.width`: String
      - `facebook.height`: String
      - `animation`: String, default "none"
      - `animationDuration`: Number, default 0
      - `animationStrength`: Number
      - `parallaxEnabled`: Boolean
      - `parallaxAmount`: Number
      - `parallaxZoom`: Number
      - `textReveal`: String
      - `animationDelay`: Number, default 0
      - `animationReplay`: String, default "once"
      - `animationEasing`: String, default "power3.out"
      - `animationBreakpoint`: String, default "all"
      - `scrollScrubEnabled`: Boolean, default false
      - `scrollScrubAxis`: String, default "y"
      - `scrollScrubDistance`: Number, default 80
      - `motionOrigin`: String, default "center center"
      - `hoverEnabled`: Boolean, default false
      - `hoverEffect`: String, default "none"
      - `hoverDuration`: Number, default 240
      - `hoverIntensity`: Number, default 4
      - `continuousEnabled`: Boolean, default false
      - `continuousEffect`: String, default "none"
      - `continuousDuration`: Number, default 2400
      - `continuousIntensity`: Number, default 4
      - `statefulEnabled`: Boolean, default false
      - `statefulEffect`: String, default "none"
      - `statefulDuration`: Number, default 260
      - `statefulStagger`: Number, default 60
      - `transform.enabled`: Boolean, default false
      - `transform.translateX.value`: Number, default 0
      - `transform.translateX.unit`: String, default "px"
      - `transform.translateY.value`: Number, default 0
      - `transform.translateY.unit`: String, default "px"
      - `transform.scaleX`: Number, default 1
      - `transform.scaleY`: Number, default 1
      - `transform.rotate`: Number, default 0
      - `transform.rotateX`: Number, default 0
      - `transform.rotateY`: Number, default 0
      - `transform.skewX`: Number, default 0
      - `transform.skewY`: Number, default 0
      - `transform.perspective`: Number, default 0
      - `transform.originX`: String, default "center"
      - `transform.originY`: String, default "center"
      - `opacity`: Mixed
      - `transitionDuration`: Mixed
      - `transitionEasing`: String
      - `states`: Mixed
      - `useIframe`: Boolean, default false
      - `popup.text`: String
      - `popup.backgroundColor`: String
      - `popup.fullScreen`: Boolean, default false
      - `popup.about_page`: ObjectId, → AboutPage
      - `custom_component.html`: String
      - `custom_component.compiled_html`: String
      - `custom_component.css`: String
      - `custom_component.compiled_css`: String
      - `custom_component.js`: String
      - `custom_component.iframe`: Boolean, default false
      - `custom_component.variables`: Object[]
      - `hoverable_media.before_hover_media.media`: ObjectId, → Media
      - `hoverable_media.before_hover_media.gcs_url`: String
      - `hoverable_media.before_hover_media.vimeo_uri`: String
      - `hoverable_media.before_hover_media.vimeo_picture`: String
      - `hoverable_media.before_hover_media.youtube_url`: String
      - `hoverable_media.before_hover_media.vimeo_url`: String
      - `hoverable_media.before_hover_media.href`: String
      - `hoverable_media.before_hover_media.router_link`: String
      - `hoverable_media.before_hover_media.thumbnail`: String
      - `hoverable_media.before_hover_media.autoplay`: Boolean, default false
      - `hoverable_media.before_hover_media.loop`: Boolean, default false
      - `hoverable_media.before_hover_media.show_controls`: Boolean, default true
      - `hoverable_media.after_hover_media.media`: ObjectId, → Media
      - `hoverable_media.after_hover_media.gcs_url`: String
      - `hoverable_media.after_hover_media.vimeo_uri`: String
      - `hoverable_media.after_hover_media.vimeo_picture`: String
      - `hoverable_media.after_hover_media.youtube_url`: String
      - `hoverable_media.after_hover_media.vimeo_url`: String
      - `hoverable_media.after_hover_media.href`: String
      - `hoverable_media.after_hover_media.router_link`: String
      - `hoverable_media.after_hover_media.thumbnail`: String
      - `hoverable_media.after_hover_media.autoplay`: Boolean, default false
      - `hoverable_media.after_hover_media.loop`: Boolean, default false
      - `hoverable_media.after_hover_media.show_controls`: Boolean, default true
      - `collapsible_container`: Object[]
      - `collapsible_container_settings.enable_customization`: Boolean, default false
      - `collapsible_container_settings.title_color`: String
      - `collapsible_container_settings.title_color_checked`: String
      - `collapsible_container_settings.title_background`: String
      - `collapsible_container_settings.title_background_checked`: String
      - `collapsible_container_settings.title_font_size`: String
      - `collapsible_container_settings.title_border_radius`: String
      - `collapsible_container_settings.title_border_color`: String
      - `collapsible_container_settings.title_border_width`: String
      - `collapsible_container_settings.body_color`: String
      - `collapsible_container_settings.body_background`: String
      - `collapsible_container_settings.body_border_radius`: String
      - `collapsible_container_settings.body_border_color`: String
      - `collapsible_container_settings.body_border_width`: String
      - `collapsible_container_settings.body_font_size`: String
      - `collapsible_container_settings.icon_color`: String
      - `collapsible_container_settings.icon_glyph_color`: String
      - `collapsible_container_settings.icon_background_color`: String
      - `quiz.title`: String
      - `quiz.header`: String
      - `quiz.questions`: Object[]
      - `quiz.score_results`: Object[]
      - `quiz.show_right_answers`: Boolean, default false
      - `quiz.mutliple_choice`: Boolean, default false
      - `partners.defaultCollection`: String, default ""
      - `partners.defaultView`: String, default "locations"
      - `scroll_sequence.media`: ObjectId, → Media
      - `scroll_sequence.scroll_length`: Number, default 3
      - `scroll_sequence.fit`: String, one of cover | contain, default "cover"
      - `scroll_sequence.background_color`: String, default "#000000"
      - `scroll_sequence.overlay_color`: String, default ""
      - `scroll_sequence.overlay_opacity`: Number, default 0
      - `scroll_sequence.rows_over`: Boolean, default true
      - `scroll_sequence.rows_effect`: String, one of slide | pop, default "slide"
      - `scroll_sequence.snap_points`: Number[]
      - `scroll_sequence.snap_scroll_speed`: Number, default 1.5
      - `scroll_sequence.snap_down`: Boolean, default true
      - `scroll_sequence.snap_up`: Boolean, default false
      - `scroll_sequence.stop_momentum`: Boolean, default false
      - `smart_search.placeholder`: String, default ""
      - `smart_search.kinds`: String[]
      - `smart_search.collections`: String[]
      - `smart_search.items`: Object[]
      - `smart_search.showKindFilter`: Boolean, default true
      - `smart_search.showPriceFilter`: Boolean, default false
      - `smart_search.showDateFilter`: Boolean, default false
      - `smart_search.showSort`: Boolean, default true
      - `smart_search.dateMode`: String, one of created | updated | availability, default "created"
      - `smart_search.layout`: String, one of grid | list, default "grid"
      - `smart_search.columns`: Number, default 3
      - `smart_search.perPage`: Number, default 12
      - `smart_search.instant`: Boolean, default true
      - `smart_search.showImages`: Boolean, default true
      - `smart_search.showPrices`: Boolean, default true
      - `smart_search.showInitial`: Boolean, default false
      - `smart_search.showAnswer`: Boolean, default false
      - `countdown.targetDate`: String, default ""
      - `countdown.expiredText`: String, default "Offer has ended"
      - `countdown.hideOnExpire`: Boolean, default false
      - `countdown.textColor`: String, default ""
      - `countdown.boxColor`: String, default ""
      - `countdown.align`: String, one of  | left | center | right, default ""
      - `swiper.slides`: Object[]
      - `swiper.autoplay`: Boolean, default false
      - `swiper.loop`: Boolean, default false
      - `swiper.show_controls`: Boolean, default true
      - `swiper.dynamic_bullets`: Boolean, default false
      - `swiper.pagination`: Boolean, default true
      - `dynamicField`: String
      - `useDynamicField`: Boolean, default false
      - `text_auto_slider.speed`: Number
      - `text_auto_slider.aspect_ratio`: String
      - `text_auto_slider.text_color`: String
      - `text_auto_slider.background_color`: String
      - `text_auto_slider.delimiter_color`: String
      - `text_auto_slider.direction`: String
      - `text_auto_slider.width`: Number
      - `text_auto_slider.font_size`: Number
      - `text_auto_slider.text_transform`: String, one of none | uppercase, default "none"
      - `text_auto_slider.texts`: Object[]
      - `image_auto_slider.speed`: Number
      - `image_auto_slider.aspect_ratio`: String
      - `image_auto_slider.direction`: String
      - `image_auto_slider.width`: Number
      - `image_auto_slider.medias`: Object[]
      - `image_dragger.aspect_ratio`: String
      - `image_dragger.media_1.media`: ObjectId, → Media
      - `image_dragger.media_1.gcs_url`: String
      - `image_dragger.media_1.vimeo_uri`: String
      - `image_dragger.media_1.vimeo_picture`: String
      - `image_dragger.media_1.vimeo_url`: String
      - `image_dragger.media_1.youtube_url`: String
      - `image_dragger.media_2.media`: ObjectId, → Media
      - `image_dragger.media_2.gcs_url`: String
      - `image_dragger.media_2.vimeo_uri`: String
      - `image_dragger.media_2.vimeo_picture`: String
      - `image_dragger.media_2.vimeo_url`: String
      - `image_dragger.media_2.youtube_url`: String
      - `image_dragger.media_2.title`: String
      - `image_dragger.media_2.body`: String
      - `image_dragger.media_2.textColor`: String
      - `image_dragger.media_2.href`: String
      - `image_dragger.media_2.router_link`: String
      - `_id`: ObjectId
    - `sections`: Object[]
      - `position`: String, one of static | relative | absolute | fixed | sticky, default "static"
      - `overflow`: String, one of visible | hidden | scroll | auto, default "visible"
      - `editorName`: String
      - `top.value`: String, default "0"
      - `top.unit`: String, default "px"
      - `top.mobile_value`: String, default ""
      - `top.mobile_unit`: String, default "px"
      - `left.value`: String, default "0"
      - `left.unit`: String, default "px"
      - `left.mobile_value`: String, default ""
      - `left.mobile_unit`: String, default "px"
      - `right.value`: String, default "0"
      - `right.unit`: String, default "px"
      - `right.mobile_value`: String, default ""
      - `right.mobile_unit`: String, default "px"
      - `bottom.value`: String, default "0"
      - `bottom.unit`: String, default "px"
      - `bottom.mobile_value`: String, default ""
      - `bottom.mobile_unit`: String, default "px"
      - `display`: String, one of block | inline | flex, default "block"
      - `flex_direction`: String, one of row | row-reverse | column | column-reverse, default "row"
      - `flex_direction_mobile`: String, default ""
      - `backdropFilter`: String, default ""
      - `justify`: String, one of start | end | center | space-between | space-around | stretch, default "start"
      - `justify_mobile`: String, default ""
      - `align`: String, one of start | end | center | space-between | space-around | stretch, default "start"
      - `align_mobile`: String, default ""
      - `animation`: String, default "none"
      - `animationDuration`: Number, default 0
      - `animationStrength`: Number
      - `parallaxEnabled`: Boolean
      - `parallaxAmount`: Number
      - `parallaxZoom`: Number
      - `animationDelay`: Number, default 0
      - `animationReplay`: String, default "once"
      - `animationEasing`: String, default "power3.out"
      - `animationBreakpoint`: String, default "all"
      - `scrollScrubEnabled`: Boolean, default false
      - `scrollScrubAxis`: String, default "y"
      - `scrollScrubDistance`: Number, default 80
      - `motionOrigin`: String, default "center center"
      - `hoverEnabled`: Boolean, default false
      - `hoverEffect`: String, default "none"
      - `hoverDuration`: Number, default 240
      - `hoverIntensity`: Number, default 4
      - `continuousEnabled`: Boolean, default false
      - `continuousEffect`: String, default "none"
      - `continuousDuration`: Number, default 2400
      - `continuousIntensity`: Number, default 4
      - `statefulEnabled`: Boolean, default false
      - `statefulEffect`: String, default "none"
      - `statefulDuration`: Number, default 260
      - `statefulStagger`: Number, default 60
      - `transform.enabled`: Boolean, default false
      - `transform.translateX.value`: Number, default 0
      - `transform.translateX.unit`: String, default "px"
      - `transform.translateY.value`: Number, default 0
      - `transform.translateY.unit`: String, default "px"
      - `transform.scaleX`: Number, default 1
      - `transform.scaleY`: Number, default 1
      - `transform.rotate`: Number, default 0
      - `transform.rotateX`: Number, default 0
      - `transform.rotateY`: Number, default 0
      - `transform.skewX`: Number, default 0
      - `transform.skewY`: Number, default 0
      - `transform.perspective`: Number, default 0
      - `transform.originX`: String, default "center"
      - `transform.originY`: String, default "center"
      - `opacity`: Mixed
      - `transitionDuration`: Mixed
      - `transitionEasing`: String
      - `states`: Mixed
      - `hoverGroup`: Boolean
      - `flex_wrap`: String, one of nowrap | wrap | wrap-reverse, default "wrap"
      - `flex_wrap_mobile`: String, default ""
      - `width.value`: String, default ""
      - `width.unit`: String, default "px"
      - `width.mobile_value`: String, default ""
      - `width.mobile_unit`: String, default "px"
      - `min_width.value`: String, default ""
      - `min_width.unit`: String, default "px"
      - `min_width.mobile_value`: String, default ""
      - `min_width.mobile_unit`: String, default "px"
      - `max_width.value`: String, default ""
      - `max_width.unit`: String, default "px"
      - `max_width.mobile_value`: String, default ""
      - `max_width.mobile_unit`: String, default "px"
      - `height.value`: String, default ""
      - `height.unit`: String, default "px"
      - `height.mobile_value`: String, default ""
      - `height.mobile_unit`: String, default "px"
      - `min_height.value`: String, default ""
      - `min_height.unit`: String, default "px"
      - `min_height.mobile_value`: String, default ""
      - `min_height.mobile_unit`: String, default "px"
      - `max_height.value`: String, default ""
      - `max_height.unit`: String, default "px"
      - `max_height.mobile_value`: String, default ""
      - `max_height.mobile_unit`: String, default "px"
      - `object_fit`: String
      - `aspect_ratio.custom`: Boolean, default false
      - `aspect_ratio.ratio`: String, default ""
      - `margin_left.value`: String, default "0"
      - `margin_left.unit`: String, default "px"
      - `margin_left.mobile_value`: String, default ""
      - `margin_left.mobile_unit`: String, default "px"
      - `margin_right.value`: String, default "0"
      - `margin_right.unit`: String, default "px"
      - `margin_right.mobile_value`: String, default ""
      - `margin_right.mobile_unit`: String, default "px"
      - `margin_top.value`: String, default "0"
      - `margin_top.unit`: String, default "px"
      - `margin_top.mobile_value`: String, default ""
      - `margin_top.mobile_unit`: String, default "px"
      - `margin_bottom.value`: String, default "0"
      - `margin_bottom.unit`: String, default "px"
      - `margin_bottom.mobile_value`: String, default ""
      - `margin_bottom.mobile_unit`: String, default "px"
      - `padding_left.value`: String, default "0"
      - `padding_left.unit`: String, default "px"
      - `padding_left.mobile_value`: String, default ""
      - `padding_left.mobile_unit`: String, default "px"
      - `padding_right.value`: String, default "0"
      - `padding_right.unit`: String, default "px"
      - `padding_right.mobile_value`: String, default ""
      - `padding_right.mobile_unit`: String, default "px"
      - `padding_top.value`: String, default "0"
      - `padding_top.unit`: String, default "px"
      - `padding_top.mobile_value`: String, default ""
      - `padding_top.mobile_unit`: String, default "px"
      - `padding_bottom.value`: String, default "0"
      - `padding_bottom.unit`: String, default "px"
      - `padding_bottom.mobile_value`: String, default ""
      - `padding_bottom.mobile_unit`: String, default "px"
      - `border_left.style`: String, default "none"
      - `border_left.color`: String
      - `border_left.width.value`: String, default "0"
      - `border_left.width.unit`: String, default "px"
      - `border_right.style`: String, default "none"
      - `border_right.color`: String
      - `border_right.width.value`: String, default "0"
      - `border_right.width.unit`: String, default "px"
      - `border_top.style`: String, default "none"
      - `border_top.color`: String
      - `border_top.width.value`: String, default "0"
      - `border_top.width.unit`: String, default "px"
      - `border_bottom.style`: String, default "none"
      - `border_bottom.color`: String
      - `border_bottom.width.value`: String, default "0"
      - `border_bottom.width.unit`: String, default "px"
      - `border_top_left_radius.value`: String, default "0"
      - `border_top_left_radius.unit`: String, default "px"
      - `border_top_right_radius.value`: String, default "0"
      - `border_top_right_radius.unit`: String, default "px"
      - `border_bottom_left_radius.value`: String, default "0"
      - `border_bottom_left_radius.unit`: String, default "px"
      - `border_bottom_right_radius.value`: String, default "0"
      - `border_bottom_right_radius.unit`: String, default "px"
      - `border_radius.value`: String, default "0"
      - `border_radius.unit`: String, default "px"
      - `specific_border_radius`: Boolean, default false
      - `box_shadows`: Object[]
      - `backgroundColor`: String
      - `backgroundGradient.enabled`: Boolean, default false
      - `backgroundGradient.type`: String
      - `backgroundGradient.degrees`: Number
      - `backgroundGradient.radialShape`: String
      - `backgroundGradient.radialPosition`: String
      - `backgroundGradient.colors`: Object[]
      - `backgroundGradient.css`: String
      - `backgroundVideo`: String
      - `backgroundImage`: String
      - `backgroundSize`: String
      - `backgroundPosition`: String
      - `backgroundRepeat`: String
      - `showOnMobile`: Boolean, default true
      - `showOnDesktop`: Boolean, default true
      - `components`: Object[]
      - `sections`: Object[]
      - `_id`: ObjectId
    - `_id`: ObjectId
  - `ai_meta`: Mixed
  - `_id`: ObjectId
- `suitability_price_plans`: ObjectId[], → PricePlan - PricePlan ids.
- `isSuitable`: Boolean - Set per request, not stored: whether the signed-in user's price plans match the page's suitability plans.
- `archived`: Boolean, default false - Hidden from the site and the admin's page list without being deleted.
- `archivedAt`: Date - When the page was archived.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Click

- `url`: String - The link that was clicked.
- `ip`: String - IP address of the visitor who clicked.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Collection

A group or filter of items; the prefix of its name is its kind (product/, grouping/, service/, blogpost/...).

- `name`: String, required - Written "<kind>/<Name>": the prefix is where it shows - product/ (a store category), service/ (a service category), blogpost/, program-category/, donation-category/; filters: grouping/ (in a product category), calendar-filter/ (on the booking page). "service/Deep cleaning". A name without a prefix shows nowhere.
- `parent_collection`: ObjectId, → Collection - Collection.id of the parent collection.
- `picture`: ObjectId, → Media - Media.id.
- `about_page`: ObjectId, → AboutPage - Reference to AboutPage.
- `match_to_option`: Boolean, default false - Matches all products which have an option with match_to_collection true.
- `is_color`: Boolean, default false - Used for products with color options.
- `color`: String - Used to visually show the color on the page when is_color is true.
- `position`: Number - Order among collections of the same kind; lower first.
- `items`: ObjectId[] - Array<Product.id> deprecated.
- `thumbnail`: ObjectId, → Media - Media.id, shown on the store cards instead of picture.
- `_id`: ObjectId

### Consent

- `title`: String, required - Consent title.
- `text`: String, required - Consent text.
- `_id`: ObjectId

### Gdpr

- `text`: String, required - Terms of use text.
- `_id`: ObjectId

### HomePageSettings

- `useDifferentLayoutForApp`: Boolean, default false - The mobile app shows its own home layout instead of the website's.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### MyContact

The site's name and contact details.

- `zip_code`: String, required - Postal/ZIP code.
- `city`: String, required - The city where the business is located.
- `address`: String, required - The street address.
- `contact`: String - Html format.
- `email`: String, required - The public contact email address.
- `google_app`: String - Link to the business's app on Google Play.
- `workhours`: String - Opening hours as text.
- `logo`: ObjectId - Media.id.
- `site_name`: String, required - The business/site name shown publicly.
- `domain`: String, required - The site's own domain.
- `stock_domain`: String - The platform subdomain the site always answers on.
- `isMarket`: Boolean, required, default false - The site is a marketplace.
- `forbidden_collections`: Object[] - Array of {collection_id}.
  - `collection_id`: ObjectId, → Collection
  - `_id`: ObjectId
- `isInit`: Boolean, default false - The site was set up from a template.
- `template`: String, default "0000" - The template the site was made from.
- `lang`: String - 2-letter language code (e.g. "en", "fr", "de").
- `allowedComponents.services`: Boolean, default true
- `allowedComponents.products`: Boolean, default true
- `allowedComponents.blogposts`: Boolean, default true
- `allowedComponents.programs`: Boolean, default true
- `favicon`: ObjectId - Media.id of the browser tab icon.
- `cacheEnabled`: Boolean - Pages are cached for faster loading.
- `has_completed_startup_prompt`: Boolean, default true - The owner went through the first AI prompt.
- `gmb_location`: String - The Google Business Profile location linked to the site.
- `ga_property`: String - The Google Analytics property linked to the site.
- `site_generated_at`: Date - When the AI builder first built this site (a plan that made the homepage). Written once (runPlan); starts the admin's 15-minute launch offer.
- `admin_first_opened_at`: Date - When the owner first opened the admin; with admin_last_opened_at it tells "never opened it" from "opened it and left".
- `admin_last_opened_at`: Date - When the owner last opened the admin.
- `admin_in_app_browser`: Boolean - The owner last opened the admin inside an app's browser.
- `domain_suggestions`: Mixed - Domain names suggested to the owner, kept so they are not suggested again.
- `_id`: ObjectId

### Partner

A physical location or partner business, with its address and contacts.

- `name`: String, required - The location's or partner's name.
- `venue`: String - Deprecated, superseded by venue_types.
- `venue_types`: Object[] - [{ collection_id }] refs to 'partner/' Collections.
  - `collection_id`: ObjectId, → Collection
  - `_id`: ObjectId
- `city`: String, required - City.
- `country`: String - Not required - records created before the split still carry the country inside city, and forcing it would reject every update to them.
- `address`: String, required - Street address.
- `contact`: String - Contact person.
- `additional_information`: String - Anything else visitors should know.
- `phone`: String - Phone number.
- `email`: String - Email.
- `website`: String - Website.
- `hours`: String - Opening hours.
- `latitude`: Number - Latitude, for the map.
- `longitude`: Number - Longitude, for the map.
- `formatted_address`: String - The address as the geocoder formats it.
- `geo_status`: String, one of pending | ok | failed, default "pending" - Pending | ok | failed. One of: pending, ok, failed.
- `custom_1`: String - Custom defined field 1.
- `custom_2`: String - Custom defined field 2.
- `custom_3`: String - Custom defined field 3.
- `medias`: Object[] - Pictures of the location.
  - `media`: ObjectId, → Media
  - `_id`: ObjectId
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### PricePlan

A recurring membership plan.

- `name`: String, required - The plan's name.
- `description`: String - What the plan gives.
- `statement_descriptor`: String, required - Short description of product.
- `plan_features`: Object[] - The plan's features, listed on its card.
  - `feature_type`: String
  - `feature_name`: String
  - `feature_value`: String
  - `_id`: ObjectId
- `price`: Number, required - Price per period.
- `recurring_options.interval`: String, required
- `recurring_options.interval_count`: Number, required
- `link`: String, required - Stripe payment page link.
- `image`: ObjectId, → Media - Media.id.
- `price_id`: String, required - Id of stripe price object.
- `payment_link_id`: String, required - Id of string payment page link.
- `free_trial_days`: Number, default 0 - Days free before the first payment.
- `billing_address_collection`: String, default "auto" - Wheter to collect billing information.
- `owner_id`: ObjectId, → User - User.id.
- `times_showed`: Number, default 0 - How many times it was shown.
- `views`: ObjectId[], → User - User ids.
- `total_views`: Number, default 0 - How many times it was opened.
- `disabled`: Boolean, default false - Cannot be subscribed to.
- `ribbon`: String - Label on the card ("Popular").
- `linked_plans`: ObjectId[], → PricePlan - PricePlan ids.
- `is_hidden`: Boolean, default false - Not listed on the site.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### ProfessionalAccount

- `user`: ObjectId, required, → User - Id of user, who has created the account.
- `show.services`: Boolean, default false
- `show.staff_members`: Boolean, default false
- `show.blogposts`: Boolean, default false
- `show.programs`: Boolean, default false
- `show.products`: Boolean, default false
- `show.events`: Boolean, default false
- `show.price_plans`: Boolean, default false
- `show.posts`: Boolean, default false
- `reviewed`: Boolean, default false - A moderator reviewed the request.
- `approved`: Boolean, default false - The account was approved as professional.
- `cover`: ObjectId, → Media - Media.id.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### PwaSettings

- `name`: String - The app's name when installed.
- `short_name`: String - Name under the home screen icon.
- `logo`: ObjectId, → Media - Media.id.
- `background_color`: String - Splash screen colour.
- `description`: String - About the app.
- `screenshots`: Object[] - Screenshots shown in the install prompt.
  - `media`: ObjectId, → Media
  - `is_mobile_preview`: Boolean, default false
  - `_id`: ObjectId
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### RatingSettings

Whether and when customers are asked to rate products, services and programs.

- `type`: String, required - Product,service, program, priceplan.
- `send`: Boolean, default false - Rating emails are sent after orders and bookings.
- `days`: Number, required - Days after the order or booking the rating email is sent.
- `title`: String, required - Heading of the rating email.
- `text1`: String, required - Main text of the rating email.
- `text2`: String - Extra text of the rating email.
- `useCustomLink`: Boolean, default false - The email links to customLinkUrl (e.g. a Google review page) instead of the site's form.
- `customLinkUrl`: String - Where the email's link leads when useCustomLink is set.
- `linkText`: String - Text of the email's link.
- `startDate`: Date, required - Orders and bookings from this date on get the email.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### SiteMenu

A link in the site's menu.

- `title`: String - The menu link label shown to users, required.
- `url`: String - Where it leads. The site's own pages as "../<path>": "../about-pages/<page url>" for a custom page, "../products", "../services?collection=service/<name>", "../contacts"; '' for the homepage; a link elsewhere (https://, mailto:) as it is.
- `position`: Number - Display order starting from 0, optional.
- `submenus`: Object[] - The dropdown's links under this entry, each { title, url, position }; url in the same "../<path>" form.
  - `title`: String
  - `url`: String
  - `position`: Number
  - `badge`: String
  - `badge_background`: String
  - `badge_color`: String
  - `badge_radius`: Number
  - `_id`: ObjectId
- `customDropdown`: Boolean, default false - Has custom page attached to this menu.
- `customDropdownId`: ObjectId, → AboutPage - Id of the about page.
- `sideMenu`: Boolean, default false - Shown in the side menu instead of the top bar.
- `sidemenus`: Object[] - Groups of links shown in the side menu, when sideMenu is true.
  - `title`: String
  - `submenus`: Object[]
    - `title`: String
    - `url`: String
    - `position`: Number
    - `icon`: String
    - `img`: ObjectId, → Media
    - `badge`: String
    - `badge_background`: String
    - `badge_color`: String
    - `badge_radius`: Number
    - `submenus`: Object[]
      - `title`: String
      - `url`: String
      - `position`: Number
      - `icon`: String
      - `img`: ObjectId, → Media
      - `badge`: String
      - `badge_background`: String
      - `badge_color`: String
      - `badge_radius`: Number
      - `_id`: ObjectId
    - `_id`: ObjectId
  - `_id`: ObjectId
- `icon`: String - FontAwesome 5 class (e.g. "fas fa-home"), optional.
- `_id`: ObjectId

### SocialComment

- `platform`: String, one of facebook | instagram, default "facebook" - One of: facebook, instagram.
- `kind`: String, one of comment | message, default "comment" - One of: comment, message.
- `conversation_id`: String - The conversation a message belongs to (messages).
- `window_expires_at`: Date - When the platform's reply window closes.
- `page_id`: String, required - The Facebook page or Instagram account it came to.
- `comment_id`: String, required - The comment's id on the platform.
- `post_id`: String - The post it is under.
- `post_url`: String - Link to that post.
- `post_message`: String - Text of that post.
- `post_links`: Object[] - Links in that post.
  - `url`: String
  - `title`: String
- `parent_id`: String - The comment it answers, for a reply.
- `page_replied`: Boolean, default false - The page has already answered it.
- `post_type`: String, default "organic" - Kind of item (comment, review, message).
- `message`: String - The comment's text.
- `author_id`: String - Who wrote it, on the platform.
- `author_name`: String - Their name.
- `comment_created_at`: Date - When it was written.
- `classification.category`: String
- `classification.score`: Number
- `classification.should_reply`: Boolean
- `classification.answer_available`: Boolean
- `classification.reasoning`: String
- `classification.language`: String
- `suggested_action`: String - What the AI suggests (reply, hide, delete, ignore).
- `reply_message`: String - The reply written for it.
- `status`: String, one of new | clean | pending | auto_actioned | approved | rejected | answered_by_page | hidden | failed | expired, default "new" - One of: new, clean, pending, auto_actioned, approved, rejected, answered_by_page, hidden, failed, expired.
- `action_taken`: String - What was done.
- `actioned_by`: String - Who did it (the owner or auto).
- `actioned_at`: Date - When.
- `reply_comment_id`: String - The reply's id on the platform.
- `undone_at`: Date - When the action was undone.
- `credits.classify`: Number, default 0
- `credits.reply`: Number, default 0
- `error`: String - Why the last action failed.
- `error_source`: String - Which step failed.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### SocialModeSettings

The switches for the site's social app features: feed, posts, groups, chat, marketplace.

- `social_mode`: Boolean, default false - The site runs as a social network (feed, profiles).
- `allow_products`: Boolean, default false - Users can sell products.
- `allow_services`: Boolean, default false - Users can offer services.
- `allow_services_stp`: Boolean, default false - Users can take service payments themselves.
- `allow_blogposts`: Boolean, default false - Users can write blog posts.
- `allow_programs`: Boolean, default false - Users can sell programs.
- `allow_programs_stp`: Boolean, default false - Users can take program payments themselves.
- `allow_posts`: Boolean, default false - Users can post to the feed.
- `allow_ai`: Boolean, default false - AI features are on for users.
- `allow_bites`: Boolean, default false - Short videos are on.
- `allow_long_videos`: Boolean, default false - Long videos are on.
- `allow_explore`: Boolean, default false - The explore page is on.
- `allow_online_payments`: Boolean, default false - Users can take online payments.
- `allow_price_plans`: Boolean, default false - Users can sell subscriptions.
- `allow_boosting_posts`: Boolean, default false - Users can pay to boost posts.
- `allow_single_ai`: Boolean, default false - Users get the single-chat AI.
- `merchant_agreement`: ObjectId, → AboutPage - AboutPage.id.
- `verification_popup`: ObjectId, → AboutPage - AboutPage.id.
- `commission`: Number - Platform commission on users' sales, in percent.
- `home_page`: String, default "home" - What opens first (feed, store, about page...).
- `navigation_pages.bites`: Boolean, default true
- `navigation_pages.long_videos`: Boolean, default true
- `navigation_pages.vouchers`: Boolean, default true
- `navigation_pages.store`: Boolean, default true
- `navigation_pages.programs`: Boolean, default true
- `navigation_pages.services`: Boolean, default true
- `navigation_pages.blogposts`: Boolean, default true
- `navigation_pages.subscription`: Boolean, default true
- `navigation_pages.playlists`: Boolean, default true
- `navigation_pages.partners`: Boolean, default true
- `navigation_pages.contacts`: Boolean, default true
- `navigation_pages.tracker`: Boolean, default true
- `navigation_pages.more`: Boolean, default true
- `navigation_pages.claims`: Boolean, default true
- `navigation_pages.miniapps`: Boolean, default false
- `navigation_pages.events`: Boolean, default false
- `navigation_pages.professional_pages`: Boolean, default false
- `allow_google_login`: Boolean, default true - Sign in with Google is on.
- `use_cdn_for_medias`: Boolean, default false - Pictures and videos load from cdn_for_medias.
- `cdn_for_medias`: String - CDN address for media.
- `use_cdn_for_microservices`: Boolean, default false - Microservices are called through cdn_for_microservices.
- `cdn_for_microservices`: String - CDN address for microservices.
- `cdn_for_sockets`: String - Address of the socket server.
- `paywall.store.has_paywall`: Boolean, default false
- `paywall.store.priceplans`: ObjectId[], → PricePlan
- `paywall.programs.has_paywall`: Boolean, default false
- `paywall.programs.priceplans`: ObjectId[], → PricePlan
- `paywall.services.has_paywall`: Boolean, default false
- `paywall.services.priceplans`: ObjectId[], → PricePlan
- `paywall.blogposts.has_paywall`: Boolean, default false
- `paywall.blogposts.priceplans`: ObjectId[], → PricePlan
- `paywall.subscription.has_paywall`: Boolean, default false
- `paywall.subscription.priceplans`: ObjectId[], → PricePlan
- `paywall.post.has_paywall`: Boolean, default false
- `paywall.post.priceplans`: ObjectId[], → PricePlan
- `paywall.groups.has_paywall`: Boolean, default false
- `paywall.groups.priceplans`: ObjectId[], → PricePlan
- `paywall.professional_pages.has_paywall`: Boolean, default false
- `paywall.professional_pages.priceplans`: ObjectId[], → PricePlan
- `allow_chat`: Boolean, default true - Users can message each other.
- `allow_in_app_notifications`: Boolean, default true - In-app notifications are on.
- `dashboard_pages.following`: Boolean, default true
- `dashboard_pages.recent`: Boolean, default true
- `dashboard_pages.threads`: Boolean, default true
- `dashboard_pages.long_videos`: Boolean, default true
- `dashboard_pages.groups`: Boolean, default true
- `dashboard_pages.about_pages`: Boolean, default true
- `dashboard_pages.mini_apps`: Boolean, default true
- `dashboard_pages.blogposts`: Boolean, default true
- `dashboard_pages.products`: Boolean, default true
- `dashboard_pages.services`: Boolean, default true
- `dashboard_pages.price_plans`: Boolean, default true
- `dashboard_pages.programs`: Boolean, default true
- `dashboard_pages.claims`: Boolean, default true
- `dashboard_pages.bites`: Boolean, default true
- `dashboard_pages.playlists`: Boolean, default true
- `dashboard_pages.partners`: Boolean, default true
- `dashboard_pages.contacts`: Boolean, default true
- `dashboard_pages.tracker`: Boolean, default true
- `dashboard_pages.vouchers`: Boolean, default true
- `dashboard_pages.explore`: Boolean, default true
- `feed_menus`: String, default "grid" - Grid, row.
- `allow_miniapps`: Boolean, default false - Mini apps are on.
- `about_pages.groups`: ObjectId, → AboutPage
- `user_groups`: Boolean, default true - Users can create groups.
- `allow_professional_pages`: Boolean, default false - Professional accounts get their own pages.
- `allow_professional_account_registration`: Boolean, default false - Users can apply for a professional account.
- `locations_map.enabled`: Boolean, default false
- `use_companion_bookings`: Boolean, default false - Bookings are handled by the companion app.
- `confirm_bookings_call`: Boolean, default false - The AI phone agent calls to confirm bookings.
- `require_professional_account.services`: Boolean, default false
- `require_professional_account.products`: Boolean, default false
- `require_professional_account.programs`: Boolean, default false
- `require_professional_account.blogposts`: Boolean, default false
- `require_professional_account.subscriptions`: Boolean, default false
- `hide_feed_menus`: Boolean, default false - Feed menus are hidden.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### SocialModerationSettings

- `platform`: String, default "facebook" - Facebook or Instagram.
- `page_id`: String, required - The connected page's id.
- `page_name`: String - The connected page's name.
- `connected_by`: ObjectId, → User - User.id.
- `last_polled_at`: Date - When comments were last fetched.
- `replies_disabled_at`: Date - When replying stopped working (permissions lost).
- `enabled`: Boolean, default false - Moderation is on.
- `auto_threshold`: Number, default 0.9 - Score above which the AI acts on its own.
- `custom_instructions`: String - The owner's instructions for judging comments.
- `auto_action`: Boolean, default false - The AI hides or deletes on its own.
- `allow_auto_delete`: Boolean, default false - Automatic actions may delete, not only hide.
- `auto_reply`: Boolean, default false - The AI writes replies.
- `auto_post_replies`: Boolean, default false - Replies are posted without the owner approving them.
- `reply_instructions`: String - The owner's instructions for replies.
- `notify_new_comments`: Boolean, default false - The owner is notified of new comments.
- `start_date`: Date - Comments from this date on are handled.
- `sources.facebook_posts`: Boolean, default false
- `sources.facebook_reviews`: Boolean, default false
- `sources.instagram_comments`: Boolean, default false
- `sources.facebook_messages`: Boolean, default false
- `sources.instagram_messages`: Boolean, default false
- `message_instructions`: String - The owner's instructions for answering messages.
- `granted_scopes`: String[] - Permissions the owner granted.
- `instagram_user_id`: String - The linked Instagram account's id.
- `instagram_username`: String - The linked Instagram account's username.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Theme

The site's colours, fonts and app tabs.

- `primary`: String, default "#3880ff" - Primary color.
- `primary_darkmode`: String, default "#3880ff" - Primary colour in dark mode.
- `secondary`: String, default "#0cd1e8" - Secondary color.
- `tertiary`: String, default "#7044ff" - Tertiary color.
- `success`: String, default "#10dc60" - Success color.
- `warning`: String, default "#ffce00" - Warning color.
- `danger`: String, default "#f04141" - Danger color.
- `dark`: String, default "#222428" - Dark color.
- `dark_darkmode`: String, default "#222428" - Dark colour in dark mode.
- `medium`: String, default "#989aa2" - Medium color.
- `light`: String, default "#f4f5f8" - Light color.
- `light_darkmode`: String, default "#f4f5f8" - Light colour in dark mode.
- `lightContrast`: String, default "#000000" - Text colour on light backgrounds.
- `lightContrast_darkmode`: String, default "#f4f5f8" - The same in dark mode.
- `headerA`: String, default "#f4f5f8" - Header A color.
- `headerB`: String, default "#f4f5f8" - Header B color.
- `headerA_darkmode`: String, default "#f4f5f8" - Header gradient start in dark mode.
- `headerB_darkmode`: String, default "#f4f5f8" - Header gradient end in dark mode.
- `headerText`: String - Header text colour.
- `headerText_darkmode`: String - Header text colour in dark mode.
- `headerGradientDeg`: Number, default 0 - Angle of the header gradient, in degrees.
- `footerA`: String, default "#222428" - Footer A color.
- `footerB`: String, default "#222428" - Footer B color.
- `footerA_darkmode`: String, default "#222428" - Footer gradient start in dark mode.
- `footerB_darkmode`: String, default "#222428" - Footer gradient end in dark mode.
- `footerGradientDeg`: Number, default 0 - Angle of the footer gradient, in degrees.
- `footerText`: String - Footer text colour.
- `footerText_darkmode`: String - Footer text colour in dark mode.
- `headingFontFamily`: String, default "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif" - Heading Font-Family.
- `headingFontLink`: String, default "" - Stylesheet URL that loads the heading font; empty when the font needs no webfont.
- `headingFontWeight`: String, default "400" - Weight of heading text.
- `headingFontStyle`: String, default "normal" - Style of heading text (normal, italic).
- `bodyFontFamily`: String, default "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif" - Body Font-Family.
- `bodyFontStyle`: String, default "normal" - Style of body text.
- `bodyFontLink`: String, default "" - Stylesheet URL that loads the body font; empty when the font needs no webfont.
- `primary_contrast`: String, default "#3880ff" - Primary contrast color.
- `primary_contrast_darkmode`: String, default "#3880ff" - Text colour on the primary colour in dark mode.
- `headerMinHeight`: String, default "5rem" - Header min-height.
- `product.title`: String, default "right"
- `product.gallery`: String, default "left"
- `product.galleryType`: String, default "gallery"
- `product.options`: String, default "right"
- `product.infos`: String, default "right"
- `product.infosShow`: Boolean, default false
- `product.description`: String, default "left"
- `product.cartBtn`: String, default "default"
- `product.comments`: Boolean, default true
- `product.sku`: Boolean, default true
- `product.brand`: Boolean, default false
- `product.cardDesign`: String, default "item-card-design-1"
- `product.likes`: Boolean, default true
- `product.rating`: Boolean, default false
- `product.titleColor`: String
- `product.priceColor`: String
- `product.descriptionColor`: String
- `product.borderRadius`: String
- `product.titleFontSize`: String
- `product.descriptionFontSize`: String
- `product.priceFontSize`: String
- `product.titleFontWeight`: String
- `product.descriptionFontWeight`: String
- `product.priceFontWeight`: String
- `product.cardBorderRadius`: String
- `product.cardBorderWidth`: String
- `product.cardBorderColor`: String
- `product.cardBackgroundColor`: String
- `product.imageAspectRatio`: String
- `product.ratingList`: Boolean, default false
- `product.customCss`: String
- `product.scroll_next`: Boolean, default false
- `product.ratingBackgroundColor`: String
- `product.quantity_counter`: Object[]
  - `enabled`: Boolean, default false
  - `max_value`: Number
  - `min_value`: Number
  - `linked_inventory`: Boolean
  - `current_value`: Number
  - `product`: ObjectId, → Product
  - `last_updated`: Date
  - `_id`: ObjectId
- `product.view_counter`: Boolean, default false
- `product.contactInfo`: Boolean, default true
- `product.cartBanner`: Boolean, default false
- `product.navigation`: Boolean, default true
- `product.price`: String, default "top"
- `product.optionsColor`: String
- `product.optionsBackground`: String
- `product.optionsFontSize`: String
- `product.optionsFontWeight`: String
- `product.optionsColorSelected`: String
- `product.optionsBackgroundSelected`: String
- `product.viewMultiplier`: Number, default 1
- `product.cartColor`: String
- `product.cartBackground`: String
- `product.cartFontSize`: String
- `product.cartFontWeight`: String
- `product.ctaColor`: String
- `product.ctaBorderColor`: String
- `product.ctaFontSize`: String
- `product.ctaFontWeight`: String
- `product.selectOption`: Boolean, default false
- `product.skin`: String
- `product.mode`: String
- `product.accentColor`: String
- `product.fieldBackground`: String
- `product.imageRadius`: Number
- `product.titleFontFamily`: String
- `product.titleTransform`: String
- `product.priceFontFamily`: String
- `product.priceFontStyle`: String
- `product.buttonRadius`: Number
- `product.hairlineWidth`: Number
- `product.hairlineColor`: String
- `product.boxShadowColor`: String
- `product.boxShadowOffsetX`: Number
- `product.boxShadowOffsetY`: Number
- `product.boxShadowBlurRadius`: Number
- `product.boxShadowSpreadRadius`: Number
- `product.chipBackground`: String
- `product.chipBorderColor`: String
- `product.chipTextColor`: String
- `service.title`: String, default "left"
- `service.gallery`: String, default "left"
- `service.galleryType`: String, default "gallery"
- `service.options`: String, default "right"
- `service.infos`: String, default "right"
- `service.description`: String, default "left"
- `service.comments`: Boolean, default true
- `service.cardDesign`: String, default "item-card-design-1"
- `service.likes`: Boolean, default true
- `service.rating`: Boolean, default false
- `service.titleColor`: String
- `service.priceColor`: String
- `service.descriptionColor`: String
- `service.borderRadius`: String
- `service.titleFontSize`: String
- `service.descriptionFontSize`: String
- `service.priceFontSize`: String
- `service.titleFontWeight`: String
- `service.descriptionFontWeight`: String
- `service.priceFontWeight`: String
- `service.cardBorderRadius`: String
- `service.cardBorderWidth`: String
- `service.cardBorderColor`: String
- `service.cardBackgroundColor`: String
- `service.imageAspectRatio`: String
- `service.ratingList`: Boolean, default false
- `service.customCss`: String
- `service.calendarColor`: String
- `service.dateBackground`: String
- `service.dateTextColor`: String
- `service.skin`: String
- `service.mode`: String
- `service.accentColor`: String
- `service.fieldBackground`: String
- `service.imageRadius`: Number
- `service.buttonRadius`: Number
- `service.titleFontFamily`: String
- `service.titleTransform`: String
- `service.priceFontFamily`: String
- `service.priceFontStyle`: String
- `service.hairlineWidth`: Number
- `service.hairlineColor`: String
- `service.boxShadowColor`: String
- `service.boxShadowOffsetX`: Number
- `service.boxShadowOffsetY`: Number
- `service.boxShadowBlurRadius`: Number
- `service.boxShadowSpreadRadius`: Number
- `service.chipBackground`: String
- `service.chipBorderColor`: String
- `service.chipTextColor`: String
- `service.hideContactInfo`: Boolean
- `blogpost.title`: String, default "right"
- `blogpost.gallery`: String, default "left"
- `blogpost.galleryType`: String, default "gallery"
- `blogpost.description`: String, default "right"
- `blogpost.comments`: Boolean, default true
- `blogpost.cardDesign`: String, default "item-card-design-1"
- `blogpost.likes`: Boolean, default true
- `blogpost.titleColor`: String
- `blogpost.descriptionColor`: String
- `blogpost.borderRadius`: String
- `blogpost.titleFontSize`: String
- `blogpost.descriptionFontSize`: String
- `blogpost.titleFontWeight`: String
- `blogpost.descriptionFontWeight`: String
- `blogpost.cardBorderRadius`: String
- `blogpost.cardBorderWidth`: String
- `blogpost.cardBorderColor`: String
- `blogpost.cardBackgroundColor`: String
- `blogpost.imageAspectRatio`: String
- `blogpost.customCss`: String
- `blogpost.scroll_next`: Boolean, default false
- `blogpost.galleryPosition`: String, default "bottom"
- `blogpost.contactInfo`: Boolean, default true
- `blogpost.bodyFontSize`: String
- `blogpost.bodyFontWeight`: String
- `blogpost.bodyColor`: String
- `blogpost.skin`: String
- `blogpost.mode`: String
- `blogpost.accentColor`: String
- `blogpost.fieldBackground`: String
- `blogpost.imageRadius`: Number
- `blogpost.buttonRadius`: Number
- `blogpost.titleFontFamily`: String
- `blogpost.titleTransform`: String
- `blogpost.hairlineWidth`: Number
- `blogpost.hairlineColor`: String
- `blogpost.boxShadowColor`: String
- `blogpost.boxShadowOffsetX`: Number
- `blogpost.boxShadowOffsetY`: Number
- `blogpost.boxShadowBlurRadius`: Number
- `blogpost.boxShadowSpreadRadius`: Number
- `blogpost.chipBackground`: String
- `blogpost.chipBorderColor`: String
- `blogpost.chipTextColor`: String
- `blogpost.showDate`: Boolean, default false
- `blogpost.dateColor`: String
- `blogpost.dateFontSize`: Number
- `blogpost.dateFontWeight`: String
- `blogpost.dateFontFamily`: String
- `blogpost.dateFontStyle`: String
- `products.gridStyle`: String, default "column"
- `products.align`: String, default "left"
- `products.title`: String, default "bottom"
- `products.image`: String, default "right"
- `products.filters`: String, default "left"
- `products.description`: Boolean, default false
- `products.transparent`: Boolean, default false
- `products.price`: Boolean, default true
- `products.showFilters`: Boolean, default true
- `products.showBanner`: Boolean, default true
- `products.animation`: String, default "none"
- `products.animationDuration`: Number, default 0
- `products.animationDelay`: Number, default 0
- `products.titleColor`: String
- `products.priceColor`: String
- `products.descriptionColor`: String
- `products.borderRadius`: String
- `products.titleFontSize`: String
- `products.descriptionFontSize`: String
- `products.priceFontSize`: String
- `products.titleFontWeight`: String
- `products.descriptionFontWeight`: String
- `products.priceFontWeight`: String
- `products.cardBorderRadius`: String
- `products.cardBorderWidth`: String
- `products.cardBorderColor`: String
- `products.cardBackgroundColor`: String
- `products.imageAspectRatio`: String
- `products.customCss`: String
- `products.filtersBackgroundColor`: String
- `products.filtersTextColor`: String
- `products.filtersBorderRadius`: String
- `products.filtersCardDesign`: String, default "default"
- `products.boxShadowColor`: String
- `products.boxShadowOffsetX`: Number, default 0
- `products.boxShadowOffsetY`: Number, default 0
- `products.boxShadowBlurRadius`: String
- `products.boxShadowSpreadRadius`: String
- `products.hideOriginAddress`: Boolean, default false
- `products.categories.layout`: String, one of list | columns, default "list"
- `products.categories.showHeading`: Boolean, default true
- `products.categories.showSubtitle`: Boolean, default true
- `products.categories.showImage`: Boolean, default false
- `products.categories.imageSize`: String, default "50px"
- `products.categories.imageRadius`: String
- `products.categories.imageAspectRatio`: String, default "1/1"
- `products.categories.imageFit`: String, one of cover | contain, default "cover"
- `products.categories.imagePadding`: Number, default 0
- `products.categories.fallback`: String, one of initial | color | none, default "initial"
- `products.categories.showChevron`: Boolean, default true
- `products.categories.titleColor`: String
- `products.categories.titleFontSize`: String
- `products.categories.titleFontWeight`: String
- `products.categories.cardBackgroundColor`: String
- `products.categories.cardBorderRadius`: String
- `products.categories.cardBorderWidth`: String
- `products.categories.cardBorderColor`: String
- `products.categories.customCss`: String
- `products.categories.site.showImage`: Boolean, default true
- `products.categories.site.imageSize`: String
- `products.categories.site.imageAspectRatio`: String
- `products.categories.site.titleColor`: String
- `products.categories.site.titleFontSize`: String
- `products.categories.site.titleFontWeight`: String
- `products.categories.site.cardBackgroundColor`: String
- `products.categories.site.cardBorderRadius`: String
- `products.categories.site.cardBorderWidth`: String
- `products.categories.site.cardBorderColor`: String
- `products.categories.site.cardPadding`: String
- `products.categories.site.gap`: String
- `products.categories.site.align`: String, one of left | center | right
- `products.categories.site.titleTransform`: String, one of uppercase | lowercase | capitalize
- `products.hideRibbon`: Boolean, default false
- `products.hideCustomFields`: Boolean, default false
- `products.showLink`: Boolean, default false
- `products.linkLabel`: String
- `products.imageObjectFit`: String
- `products.imageRadius`: Number
- `products.cardPaddingX`: Number
- `products.cardPaddingY`: Number
- `products.titleTransform`: String
- `products.priceFontStyle`: String
- `products.fieldBackground`: String
- `products.showRating`: Boolean
- `products.gap`: Number
- `products.titleFontFamily`: String
- `products.priceFontFamily`: String
- `products.mode`: String
- `products.hairlineWidth`: Number
- `products.hairlineColor`: String
- `products.scrimGradient`: String
- `products.skin`: String
- `products.columns`: Number
- `products.columnsMobile`: Number
- `products.accentColor`: String
- `products.filtersSkin`: String
- `products.filtersAccentColor`: String
- `products.filtersHeadingFontFamily`: String
- `products.filtersHeadingTransform`: String
- `products.filtersBorderWidth`: Number
- `products.filtersBorderColor`: String
- `products.filtersPanelBackground`: String
- `products.filtersBoxShadowColor`: String
- `products.filtersBoxShadowOffsetX`: Number
- `products.filtersBoxShadowOffsetY`: Number
- `products.filtersBoxShadowBlurRadius`: Number
- `products.filtersBoxShadowSpreadRadius`: Number
- `products.showViews`: Boolean, default false
- `products.viewsColor`: String
- `services.gridStyle`: String, default "column"
- `services.align`: String, default "left"
- `services.title`: String, default "bottom"
- `services.image`: String, default "right"
- `services.filters`: String, default "left"
- `services.description`: Boolean, default false
- `services.transparent`: Boolean, default false
- `services.price`: Boolean, default true
- `services.showFilters`: Boolean, default true
- `services.showCategoryFilters`: Boolean, default true
- `services.showBanner`: Boolean, default true
- `services.animation`: String, default "none"
- `services.animationDuration`: Number, default 0
- `services.animationDelay`: Number, default 0
- `services.rating`: Boolean, default false
- `services.titleColor`: String
- `services.priceColor`: String
- `services.descriptionColor`: String
- `services.borderRadius`: String
- `services.titleFontSize`: String
- `services.descriptionFontSize`: String
- `services.priceFontSize`: String
- `services.titleFontWeight`: String
- `services.descriptionFontWeight`: String
- `services.priceFontWeight`: String
- `services.cardBorderRadius`: String
- `services.cardBorderWidth`: String
- `services.cardBorderColor`: String
- `services.cardBackgroundColor`: String
- `services.imageAspectRatio`: String
- `services.customCss`: String
- `services.filtersBackgroundColor`: String
- `services.filtersTextColor`: String
- `services.filtersBorderRadius`: String
- `services.boxShadowColor`: String
- `services.boxShadowOffsetX`: Number, default 0
- `services.boxShadowOffsetY`: Number, default 0
- `services.boxShadowBlurRadius`: String
- `services.boxShadowSpreadRadius`: String
- `services.showBreadCrumbs`: Boolean, default true
- `services.imagePadding`: Number, default 0
- `services.categories.layout`: String, one of list | columns, default "list"
- `services.categories.showHeading`: Boolean, default true
- `services.categories.showSubtitle`: Boolean, default true
- `services.categories.showImage`: Boolean, default false
- `services.categories.imageSize`: String, default "50px"
- `services.categories.imageRadius`: String
- `services.categories.imageAspectRatio`: String, default "1/1"
- `services.categories.imageFit`: String, one of cover | contain, default "cover"
- `services.categories.imagePadding`: Number, default 0
- `services.categories.fallback`: String, one of initial | color | none, default "initial"
- `services.categories.showChevron`: Boolean, default true
- `services.categories.titleColor`: String
- `services.categories.titleFontSize`: String
- `services.categories.titleFontWeight`: String
- `services.categories.cardBackgroundColor`: String
- `services.categories.cardBorderRadius`: String
- `services.categories.cardBorderWidth`: String
- `services.categories.cardBorderColor`: String
- `services.categories.customCss`: String
- `services.categories.site.showImage`: Boolean, default true
- `services.categories.site.imageSize`: String
- `services.categories.site.imageAspectRatio`: String
- `services.categories.site.titleColor`: String
- `services.categories.site.titleFontSize`: String
- `services.categories.site.titleFontWeight`: String
- `services.categories.site.cardBackgroundColor`: String
- `services.categories.site.cardBorderRadius`: String
- `services.categories.site.cardBorderWidth`: String
- `services.categories.site.cardBorderColor`: String
- `services.categories.site.cardPadding`: String
- `services.categories.site.gap`: String
- `services.categories.site.align`: String, one of left | center | right
- `services.categories.site.titleTransform`: String, one of uppercase | lowercase | capitalize
- `services.titleTransform`: String
- `services.priceFontStyle`: String
- `services.cardPaddingX`: Number
- `services.cardPaddingY`: Number
- `services.fieldBackground`: String
- `services.imageObjectFit`: String
- `services.imageRadius`: Number
- `services.accentColor`: String
- `services.gap`: Number
- `services.hideCustomFields`: Boolean, default false
- `services.showDuration`: Boolean, default false
- `services.durationLabel`: String
- `services.showLink`: Boolean, default false
- `services.linkLabel`: String
- `services.titleFontFamily`: String
- `services.priceFontFamily`: String
- `services.columns`: Number
- `services.columnsMobile`: Number
- `services.skin`: String
- `services.mode`: String
- `services.hairlineWidth`: Number
- `services.hairlineColor`: String
- `services.scrimGradient`: String
- `services.filtersSkin`: String
- `services.filtersAccentColor`: String
- `services.filtersHeadingFontFamily`: String
- `services.filtersHeadingTransform`: String
- `services.filtersBorderWidth`: Number
- `services.filtersBorderColor`: String
- `services.filtersPanelBackground`: String
- `services.filtersBoxShadowColor`: String
- `services.filtersBoxShadowOffsetX`: Number
- `services.filtersBoxShadowOffsetY`: Number
- `services.filtersBoxShadowBlurRadius`: Number
- `services.filtersBoxShadowSpreadRadius`: Number
- `services.hideCalendarDuration`: Boolean, default false
- `services.calendar`: Boolean
- `services.rowRuleWidth`: Number
- `services.rowRuleColor`: String
- `services.maxWidth`: Number
- `services.showViews`: Boolean, default false
- `services.viewsColor`: String
- `blogposts.gridStyle`: String, default "row"
- `blogposts.align`: String, default "left"
- `blogposts.title`: String, default "bottom"
- `blogposts.image`: String, default "right"
- `blogposts.filters`: String, default "left"
- `blogposts.description`: Boolean, default false
- `blogposts.showFilters`: Boolean, default true
- `blogposts.header`: Boolean, default true
- `blogposts.showBanner`: Boolean, default true
- `blogposts.animation`: String, default "none"
- `blogposts.animationDuration`: Number, default 0
- `blogposts.animationDelay`: Number, default 0
- `blogposts.titleColor`: String
- `blogposts.descriptionColor`: String
- `blogposts.borderRadius`: String
- `blogposts.titleFontSize`: String
- `blogposts.descriptionFontSize`: String
- `blogposts.titleFontWeight`: String
- `blogposts.descriptionFontWeight`: String
- `blogposts.cardBorderRadius`: String
- `blogposts.cardBorderWidth`: String
- `blogposts.cardBorderColor`: String
- `blogposts.cardBackgroundColor`: String
- `blogposts.imageAspectRatio`: String
- `blogposts.customCss`: String
- `blogposts.sort`: Number, default -1
- `blogposts.showBreadCrumbs`: Boolean, default true
- `blogposts.filtersBackgroundColor`: String
- `blogposts.filtersTextColor`: String
- `blogposts.filtersBorderRadius`: String
- `blogposts.boxShadowColor`: String
- `blogposts.boxShadowOffsetX`: Number, default 0
- `blogposts.boxShadowOffsetY`: Number, default 0
- `blogposts.boxShadowBlurRadius`: String
- `blogposts.boxShadowSpreadRadius`: String
- `blogposts.imagePadding`: Number, default 0
- `blogposts.categories.layout`: String, one of list | columns, default "list"
- `blogposts.categories.showHeading`: Boolean, default true
- `blogposts.categories.showSubtitle`: Boolean, default true
- `blogposts.categories.showImage`: Boolean, default false
- `blogposts.categories.imageSize`: String, default "50px"
- `blogposts.categories.imageRadius`: String
- `blogposts.categories.imageAspectRatio`: String, default "1/1"
- `blogposts.categories.imageFit`: String, one of cover | contain, default "cover"
- `blogposts.categories.imagePadding`: Number, default 0
- `blogposts.categories.fallback`: String, one of initial | color | none, default "initial"
- `blogposts.categories.showChevron`: Boolean, default true
- `blogposts.categories.titleColor`: String
- `blogposts.categories.titleFontSize`: String
- `blogposts.categories.titleFontWeight`: String
- `blogposts.categories.cardBackgroundColor`: String
- `blogposts.categories.cardBorderRadius`: String
- `blogposts.categories.cardBorderWidth`: String
- `blogposts.categories.cardBorderColor`: String
- `blogposts.categories.customCss`: String
- `blogposts.categories.site.showImage`: Boolean, default true
- `blogposts.categories.site.imageSize`: String
- `blogposts.categories.site.imageAspectRatio`: String
- `blogposts.categories.site.titleColor`: String
- `blogposts.categories.site.titleFontSize`: String
- `blogposts.categories.site.titleFontWeight`: String
- `blogposts.categories.site.cardBackgroundColor`: String
- `blogposts.categories.site.cardBorderRadius`: String
- `blogposts.categories.site.cardBorderWidth`: String
- `blogposts.categories.site.cardBorderColor`: String
- `blogposts.categories.site.cardPadding`: String
- `blogposts.categories.site.gap`: String
- `blogposts.categories.site.align`: String, one of left | center | right
- `blogposts.categories.site.titleTransform`: String, one of uppercase | lowercase | capitalize
- `blogposts.titleTransform`: String
- `blogposts.cardPaddingX`: Number
- `blogposts.cardPaddingY`: Number
- `blogposts.fieldBackground`: String
- `blogposts.imageObjectFit`: String
- `blogposts.imageRadius`: Number
- `blogposts.accentColor`: String
- `blogposts.gap`: Number
- `blogposts.hideCustomFields`: Boolean, default false
- `blogposts.hideImage`: Boolean, default false
- `blogposts.showDate`: Boolean, default false
- `blogposts.dateColor`: String
- `blogposts.dateFontSize`: String
- `blogposts.dateFontWeight`: String
- `blogposts.dateFontFamily`: String
- `blogposts.dateFontStyle`: String
- `blogposts.hideLink`: Boolean, default false
- `blogposts.linkLabel`: String
- `blogposts.titleFontFamily`: String
- `blogposts.columns`: Number
- `blogposts.columnsMobile`: Number
- `blogposts.skin`: String
- `blogposts.mode`: String
- `blogposts.hairlineWidth`: Number
- `blogposts.hairlineColor`: String
- `blogposts.scrimGradient`: String
- `blogposts.filtersSkin`: String
- `blogposts.filtersAccentColor`: String
- `blogposts.filtersHeadingFontFamily`: String
- `blogposts.filtersHeadingTransform`: String
- `blogposts.filtersBorderWidth`: Number
- `blogposts.filtersBorderColor`: String
- `blogposts.filtersPanelBackground`: String
- `blogposts.filtersBoxShadowColor`: String
- `blogposts.filtersBoxShadowOffsetX`: Number
- `blogposts.filtersBoxShadowOffsetY`: Number
- `blogposts.filtersBoxShadowBlurRadius`: Number
- `blogposts.filtersBoxShadowSpreadRadius`: Number
- `blogposts.rowRuleWidth`: Number
- `blogposts.rowRuleColor`: String
- `blogposts.maxWidth`: Number
- `blogposts.hideCategory`: Boolean, default false
- `blogposts.showViews`: Boolean, default false
- `blogposts.viewsColor`: String
- `videos.gridStyle`: String, default "column"
- `videos.align`: String, default "center"
- `videos.title`: String, default "bottom"
- `videos.video`: String, default "right"
- `videos.filters`: String, default "left"
- `videos.showTitle`: Boolean, default true
- `videos.showFilters`: Boolean, default true
- `videos.showBanner`: Boolean, default true
- `videos.animation`: String, default "none"
- `videos.animationDuration`: Number, default 0
- `videos.animationDelay`: Number, default 0
- `videos.showBreadCrumbs`: Boolean, default true
- `program.cardDesign`: String, default "item-card-design-1"
- `program.comments`: Boolean, default true
- `program.likes`: Boolean, default true
- `program.rating`: Boolean, default false
- `program.titleColor`: String
- `program.descriptionColor`: String
- `program.borderRadius`: String
- `program.titleFontSize`: String
- `program.descriptionFontSize`: String
- `program.titleFontWeight`: String
- `program.descriptionFontWeight`: String
- `program.cardBorderRadius`: String
- `program.cardBorderWidth`: String
- `program.cardBorderColor`: String
- `program.cardBackgroundColor`: String
- `program.imageAspectRatio`: String
- `program.ratingList`: Boolean, default false
- `program.customCss`: String
- `program.showBreadCrumbs`: Boolean, default true
- `professional_account.cardDesign`: String, default "professional-account-design-1"
- `professional_account.likes`: Boolean, default true
- `professional_account.titleColor`: String
- `professional_account.priceColor`: String
- `professional_account.descriptionColor`: String
- `professional_account.borderRadius`: String
- `professional_account.titleFontSize`: String
- `professional_account.descriptionFontSize`: String
- `professional_account.priceFontSize`: String
- `professional_account.titleFontWeight`: String
- `professional_account.descriptionFontWeight`: String
- `professional_account.priceFontWeight`: String
- `professional_account.cardBorderRadius`: String
- `professional_account.cardBorderWidth`: String
- `professional_account.cardBorderColor`: String
- `professional_account.cardBackgroundColor`: String
- `professional_account.imageAspectRatio`: String
- `professional_account.ratingList`: Boolean, default false
- `professional_account.customCss`: String
- `personal_account.cardDesign`: String, default "account-design-1"
- `footer.columns`: Object[]
  - `type`: String, default "contacts"
  - `title`: String, default "Give us a call"
  - `title_href`: String, default "contacts"
  - `custom_text`: String, default "<p><a href=\"tel: +359 123321321\">tel: +359 123321321</a></p>"
  - `social_medias`: Mixed[]
  - `medias`: Object[]
    - `media`: String
    - `vimeo_uri`: String
    - `vimeo_picture`: String
    - `vimeo_url`: String
    - `youtube_url`: String
    - `_id`: ObjectId
  - `_id`: ObjectId
- `footer.about_page`: ObjectId, → AboutPage
- `footer.customCss`: String
- `header.twoRows`: Boolean, default false
- `header.sidenav`: Boolean, default false
- `header.sticky`: Boolean, default true
- `header.justifyLinks`: String, default "end"
- `header.justifyLinksMobile`: String
- `header.linkFontSize`: String, default "1.0rem"
- `header.linkFontWeight`: String, default "400"
- `header.linkFontFamily`: String
- `header.linkTextTransform`: String
- `header.linkLetterSpacing`: String
- `header.barBorderWidth`: Number
- `header.barBorderColor`: String
- `header.barFloating`: Boolean, default false
- `header.barBorderRadius`: Number
- `header.barShadow`: String
- `header.logoSize`: String, default "140px"
- `header.logoSizeMobile`: String
- `header.row1Height`: String
- `header.row2Height`: String
- `header.bannerHeight`: String
- `header.contentMaxWidth`: String
- `header.justifyLogo`: String, default "start"
- `header.userAndCartPosition`: String, default "top"
- `header.linkMargin`: String, default "0px"
- `header.about_page`: ObjectId, → AboutPage
- `header.about_page_position`: String
- `header.showSearch`: Boolean, default true
- `header.smartSearch.enabled`: Boolean, default false
- `header.smartSearch.placeholder`: String, default ""
- `header.smartSearch.kinds`: String[]
- `header.smartSearch.collections`: String[]
- `header.smartSearch.items`: Object[]
  - `kind`: String
  - `ref_id`: String
  - `title`: String
- `header.smartSearch.showKindFilter`: Boolean, default true
- `header.smartSearch.showPriceFilter`: Boolean, default false
- `header.smartSearch.showDateFilter`: Boolean, default false
- `header.smartSearch.showSort`: Boolean, default true
- `header.smartSearch.dateMode`: String, one of created | updated | availability, default "created"
- `header.smartSearch.layout`: String, one of grid | list, default "grid"
- `header.smartSearch.columns`: Number, default 3
- `header.smartSearch.perPage`: Number, default 12
- `header.smartSearch.instant`: Boolean, default true
- `header.smartSearch.showImages`: Boolean, default true
- `header.smartSearch.showPrices`: Boolean, default true
- `header.smartSearch.showInitial`: Boolean, default false
- `header.smartSearch.showAnswer`: Boolean, default false
- `header.showLogIn`: Boolean, default true
- `header.showActionButton`: Boolean, default false
- `header.actionButton.title`: String
- `header.actionButton.url`: String
- `header.actionButton.fill`: String
- `header.actionButton.color`: String
- `header.actionButton.class`: String, default "btn btn-primary"
- `header.actionButton.customColor`: String
- `header.actionButton.textColor`: String
- `header.actionButton.fontSize`: Number
- `header.actionButton.borderRadius`: String
- `header.actionButton.position`: String
- `header.showCart`: Boolean, default true
- `header.cart_position`: String
- `header.login_position`: String
- `header.search_position`: String
- `header.login_icon`: Boolean, default false
- `header.login_icon_only`: Boolean, default false
- `header.login_icon_class`: String
- `header.login_in_app`: Boolean, default false
- `header.cart_row`: String
- `header.login_row`: String
- `header.search_row`: String
- `header.pinned_links`: Object[]
  - `title`: String, required
  - `link`: String, required
  - `icon`: String, required
  - `_id`: ObjectId
- `header.customCss`: String
- `header.logoPosition`: String, default "top"
- `header.firstrow_links`: Object[]
  - `title`: String
  - `link`: String
  - `icon`: String
  - `_id`: ObjectId
- `header.firstrow_links_justify`: String, default "start"
- `header.firstrow_links_spread`: String
- `header.showBanner`: Boolean, default false
- `header.banner.items`: Object[]
  - `title`: String
  - `link`: String
  - `icon`: String
  - `img`: ObjectId, → Media
  - `_id`: ObjectId
- `header.banner.fontSize`: String, default "1.0rem"
- `header.banner.fontWeight`: String, default "400"
- `header.banner.textColor`: String
- `header.banner.backgroundColor`: String
- `header.banner.justifyContent`: String, default "start"
- `header.banner.motion`: String, one of  | scroll | rotate, default ""
- `header.banner.speed`: String, one of  | slow | fast, default ""
- `header.banner.speedLevel`: Number
- `header.banner.animation`: String, one of  | flip | zoom | spring, default ""
- `header.banner.direction`: String, one of  | right, default ""
- `header.banner.repeat`: Boolean, default false
- `header.banner.iconGap`: Number
- `header.banner.itemGap`: Number
- `header.isFullWidth`: Boolean, default true
- `header.app_user_position`: String, one of top | bottom, default "bottom"
- `header.logoMediaMobile`: ObjectId, → Media
- `header.sidenavIconBorderRadius`: String
- `header.sidenavIconBorderWidth`: String
- `header.sidenavIconColor`: String
- `header.sidenavIcon`: String
- `header.sidenavIconSize`: String
- `header.sidenavIconMedia`: ObjectId, → Media
- `header.menuIconPosition`: String
- `header.logoPositionMobile`: String
- `header.search_position_mobile`: String
- `header.login_position_mobile`: String
- `header.cart_position_mobile`: String
- `header.button_position_mobile`: String
- `header.sidenavIconAnimation`: String
- `header.sidenavIconClose`: String
- `header.sidenavIconMediaClose`: ObjectId, → Media
- `header.elements_order.logo.value`: Number
- `header.elements_order.logo.mobile_value`: Number
- `header.elements_order.nav.value`: Number
- `header.elements_order.nav.mobile_value`: Number
- `header.elements_order.firstrow.value`: Number
- `header.elements_order.firstrow.mobile_value`: Number
- `header.elements_order.search.value`: Number
- `header.elements_order.search.mobile_value`: Number
- `header.elements_order.login.value`: Number
- `header.elements_order.login.mobile_value`: Number
- `header.elements_order.cart.value`: Number
- `header.elements_order.cart.mobile_value`: Number
- `header.elements_order.button.value`: Number
- `header.elements_order.button.mobile_value`: Number
- `header.elements_order.menuicon.value`: Number
- `header.elements_order.menuicon.mobile_value`: Number
- `header.elements_style.nav.background`: String
- `header.elements_style.nav.color`: String
- `header.elements_style.nav.border_color`: String
- `header.elements_style.nav.border_width`: Number
- `header.elements_style.nav.border_radius`: Number
- `header.elements_style.nav.font_size`: Number
- `header.elements_style.nav.border_top_width`: Number
- `header.elements_style.nav.border_right_width`: Number
- `header.elements_style.nav.border_bottom_width`: Number
- `header.elements_style.nav.border_left_width`: Number
- `header.elements_style.nav_active.background`: String
- `header.elements_style.nav_active.color`: String
- `header.elements_style.nav_active.border_color`: String
- `header.elements_style.nav_active.border_width`: Number
- `header.elements_style.nav_active.border_radius`: Number
- `header.elements_style.nav_active.font_size`: Number
- `header.elements_style.nav_active.border_top_width`: Number
- `header.elements_style.nav_active.border_right_width`: Number
- `header.elements_style.nav_active.border_bottom_width`: Number
- `header.elements_style.nav_active.border_left_width`: Number
- `header.elements_style.firstrow.background`: String
- `header.elements_style.firstrow.color`: String
- `header.elements_style.firstrow.border_color`: String
- `header.elements_style.firstrow.border_width`: Number
- `header.elements_style.firstrow.border_radius`: Number
- `header.elements_style.firstrow.font_size`: Number
- `header.elements_style.firstrow.border_top_width`: Number
- `header.elements_style.firstrow.border_right_width`: Number
- `header.elements_style.firstrow.border_bottom_width`: Number
- `header.elements_style.firstrow.border_left_width`: Number
- `header.elements_style.search.background`: String
- `header.elements_style.search.color`: String
- `header.elements_style.search.border_color`: String
- `header.elements_style.search.border_width`: Number
- `header.elements_style.search.border_radius`: Number
- `header.elements_style.search.font_size`: Number
- `header.elements_style.search.border_top_width`: Number
- `header.elements_style.search.border_right_width`: Number
- `header.elements_style.search.border_bottom_width`: Number
- `header.elements_style.search.border_left_width`: Number
- `header.elements_style.login.background`: String
- `header.elements_style.login.color`: String
- `header.elements_style.login.border_color`: String
- `header.elements_style.login.border_width`: Number
- `header.elements_style.login.border_radius`: Number
- `header.elements_style.login.font_size`: Number
- `header.elements_style.login.border_top_width`: Number
- `header.elements_style.login.border_right_width`: Number
- `header.elements_style.login.border_bottom_width`: Number
- `header.elements_style.login.border_left_width`: Number
- `header.elements_style.cart.background`: String
- `header.elements_style.cart.color`: String
- `header.elements_style.cart.border_color`: String
- `header.elements_style.cart.border_width`: Number
- `header.elements_style.cart.border_radius`: Number
- `header.elements_style.cart.font_size`: Number
- `header.elements_style.cart.border_top_width`: Number
- `header.elements_style.cart.border_right_width`: Number
- `header.elements_style.cart.border_bottom_width`: Number
- `header.elements_style.cart.border_left_width`: Number
- `header.elements_spacing.logo.margin_top`: Number
- `header.elements_spacing.logo.margin_top_unit`: String
- `header.elements_spacing.logo.mobile_margin_top`: Number
- `header.elements_spacing.logo.mobile_margin_top_unit`: String
- `header.elements_spacing.logo.margin_right`: Number
- `header.elements_spacing.logo.margin_right_unit`: String
- `header.elements_spacing.logo.mobile_margin_right`: Number
- `header.elements_spacing.logo.mobile_margin_right_unit`: String
- `header.elements_spacing.logo.margin_bottom`: Number
- `header.elements_spacing.logo.margin_bottom_unit`: String
- `header.elements_spacing.logo.mobile_margin_bottom`: Number
- `header.elements_spacing.logo.mobile_margin_bottom_unit`: String
- `header.elements_spacing.logo.margin_left`: Number
- `header.elements_spacing.logo.margin_left_unit`: String
- `header.elements_spacing.logo.mobile_margin_left`: Number
- `header.elements_spacing.logo.mobile_margin_left_unit`: String
- `header.elements_spacing.nav.margin_top`: Number
- `header.elements_spacing.nav.margin_top_unit`: String
- `header.elements_spacing.nav.mobile_margin_top`: Number
- `header.elements_spacing.nav.mobile_margin_top_unit`: String
- `header.elements_spacing.nav.padding_top`: Number
- `header.elements_spacing.nav.padding_top_unit`: String
- `header.elements_spacing.nav.mobile_padding_top`: Number
- `header.elements_spacing.nav.mobile_padding_top_unit`: String
- `header.elements_spacing.nav.margin_right`: Number
- `header.elements_spacing.nav.margin_right_unit`: String
- `header.elements_spacing.nav.mobile_margin_right`: Number
- `header.elements_spacing.nav.mobile_margin_right_unit`: String
- `header.elements_spacing.nav.padding_right`: Number
- `header.elements_spacing.nav.padding_right_unit`: String
- `header.elements_spacing.nav.mobile_padding_right`: Number
- `header.elements_spacing.nav.mobile_padding_right_unit`: String
- `header.elements_spacing.nav.margin_bottom`: Number
- `header.elements_spacing.nav.margin_bottom_unit`: String
- `header.elements_spacing.nav.mobile_margin_bottom`: Number
- `header.elements_spacing.nav.mobile_margin_bottom_unit`: String
- `header.elements_spacing.nav.padding_bottom`: Number
- `header.elements_spacing.nav.padding_bottom_unit`: String
- `header.elements_spacing.nav.mobile_padding_bottom`: Number
- `header.elements_spacing.nav.mobile_padding_bottom_unit`: String
- `header.elements_spacing.nav.margin_left`: Number
- `header.elements_spacing.nav.margin_left_unit`: String
- `header.elements_spacing.nav.mobile_margin_left`: Number
- `header.elements_spacing.nav.mobile_margin_left_unit`: String
- `header.elements_spacing.nav.padding_left`: Number
- `header.elements_spacing.nav.padding_left_unit`: String
- `header.elements_spacing.nav.mobile_padding_left`: Number
- `header.elements_spacing.nav.mobile_padding_left_unit`: String
- `header.elements_spacing.firstrow.margin_top`: Number
- `header.elements_spacing.firstrow.margin_top_unit`: String
- `header.elements_spacing.firstrow.mobile_margin_top`: Number
- `header.elements_spacing.firstrow.mobile_margin_top_unit`: String
- `header.elements_spacing.firstrow.padding_top`: Number
- `header.elements_spacing.firstrow.padding_top_unit`: String
- `header.elements_spacing.firstrow.mobile_padding_top`: Number
- `header.elements_spacing.firstrow.mobile_padding_top_unit`: String
- `header.elements_spacing.firstrow.margin_right`: Number
- `header.elements_spacing.firstrow.margin_right_unit`: String
- `header.elements_spacing.firstrow.mobile_margin_right`: Number
- `header.elements_spacing.firstrow.mobile_margin_right_unit`: String
- `header.elements_spacing.firstrow.padding_right`: Number
- `header.elements_spacing.firstrow.padding_right_unit`: String
- `header.elements_spacing.firstrow.mobile_padding_right`: Number
- `header.elements_spacing.firstrow.mobile_padding_right_unit`: String
- `header.elements_spacing.firstrow.margin_bottom`: Number
- `header.elements_spacing.firstrow.margin_bottom_unit`: String
- `header.elements_spacing.firstrow.mobile_margin_bottom`: Number
- `header.elements_spacing.firstrow.mobile_margin_bottom_unit`: String
- `header.elements_spacing.firstrow.padding_bottom`: Number
- `header.elements_spacing.firstrow.padding_bottom_unit`: String
- `header.elements_spacing.firstrow.mobile_padding_bottom`: Number
- `header.elements_spacing.firstrow.mobile_padding_bottom_unit`: String
- `header.elements_spacing.firstrow.margin_left`: Number
- `header.elements_spacing.firstrow.margin_left_unit`: String
- `header.elements_spacing.firstrow.mobile_margin_left`: Number
- `header.elements_spacing.firstrow.mobile_margin_left_unit`: String
- `header.elements_spacing.firstrow.padding_left`: Number
- `header.elements_spacing.firstrow.padding_left_unit`: String
- `header.elements_spacing.firstrow.mobile_padding_left`: Number
- `header.elements_spacing.firstrow.mobile_padding_left_unit`: String
- `header.elements_spacing.search.margin_top`: Number
- `header.elements_spacing.search.margin_top_unit`: String
- `header.elements_spacing.search.mobile_margin_top`: Number
- `header.elements_spacing.search.mobile_margin_top_unit`: String
- `header.elements_spacing.search.padding_top`: Number
- `header.elements_spacing.search.padding_top_unit`: String
- `header.elements_spacing.search.mobile_padding_top`: Number
- `header.elements_spacing.search.mobile_padding_top_unit`: String
- `header.elements_spacing.search.margin_right`: Number
- `header.elements_spacing.search.margin_right_unit`: String
- `header.elements_spacing.search.mobile_margin_right`: Number
- `header.elements_spacing.search.mobile_margin_right_unit`: String
- `header.elements_spacing.search.padding_right`: Number
- `header.elements_spacing.search.padding_right_unit`: String
- `header.elements_spacing.search.mobile_padding_right`: Number
- `header.elements_spacing.search.mobile_padding_right_unit`: String
- `header.elements_spacing.search.margin_bottom`: Number
- `header.elements_spacing.search.margin_bottom_unit`: String
- `header.elements_spacing.search.mobile_margin_bottom`: Number
- `header.elements_spacing.search.mobile_margin_bottom_unit`: String
- `header.elements_spacing.search.padding_bottom`: Number
- `header.elements_spacing.search.padding_bottom_unit`: String
- `header.elements_spacing.search.mobile_padding_bottom`: Number
- `header.elements_spacing.search.mobile_padding_bottom_unit`: String
- `header.elements_spacing.search.margin_left`: Number
- `header.elements_spacing.search.margin_left_unit`: String
- `header.elements_spacing.search.mobile_margin_left`: Number
- `header.elements_spacing.search.mobile_margin_left_unit`: String
- `header.elements_spacing.search.padding_left`: Number
- `header.elements_spacing.search.padding_left_unit`: String
- `header.elements_spacing.search.mobile_padding_left`: Number
- `header.elements_spacing.search.mobile_padding_left_unit`: String
- `header.elements_spacing.login.margin_top`: Number
- `header.elements_spacing.login.margin_top_unit`: String
- `header.elements_spacing.login.mobile_margin_top`: Number
- `header.elements_spacing.login.mobile_margin_top_unit`: String
- `header.elements_spacing.login.padding_top`: Number
- `header.elements_spacing.login.padding_top_unit`: String
- `header.elements_spacing.login.mobile_padding_top`: Number
- `header.elements_spacing.login.mobile_padding_top_unit`: String
- `header.elements_spacing.login.margin_right`: Number
- `header.elements_spacing.login.margin_right_unit`: String
- `header.elements_spacing.login.mobile_margin_right`: Number
- `header.elements_spacing.login.mobile_margin_right_unit`: String
- `header.elements_spacing.login.padding_right`: Number
- `header.elements_spacing.login.padding_right_unit`: String
- `header.elements_spacing.login.mobile_padding_right`: Number
- `header.elements_spacing.login.mobile_padding_right_unit`: String
- `header.elements_spacing.login.margin_bottom`: Number
- `header.elements_spacing.login.margin_bottom_unit`: String
- `header.elements_spacing.login.mobile_margin_bottom`: Number
- `header.elements_spacing.login.mobile_margin_bottom_unit`: String
- `header.elements_spacing.login.padding_bottom`: Number
- `header.elements_spacing.login.padding_bottom_unit`: String
- `header.elements_spacing.login.mobile_padding_bottom`: Number
- `header.elements_spacing.login.mobile_padding_bottom_unit`: String
- `header.elements_spacing.login.margin_left`: Number
- `header.elements_spacing.login.margin_left_unit`: String
- `header.elements_spacing.login.mobile_margin_left`: Number
- `header.elements_spacing.login.mobile_margin_left_unit`: String
- `header.elements_spacing.login.padding_left`: Number
- `header.elements_spacing.login.padding_left_unit`: String
- `header.elements_spacing.login.mobile_padding_left`: Number
- `header.elements_spacing.login.mobile_padding_left_unit`: String
- `header.elements_spacing.cart.margin_top`: Number
- `header.elements_spacing.cart.margin_top_unit`: String
- `header.elements_spacing.cart.mobile_margin_top`: Number
- `header.elements_spacing.cart.mobile_margin_top_unit`: String
- `header.elements_spacing.cart.padding_top`: Number
- `header.elements_spacing.cart.padding_top_unit`: String
- `header.elements_spacing.cart.mobile_padding_top`: Number
- `header.elements_spacing.cart.mobile_padding_top_unit`: String
- `header.elements_spacing.cart.margin_right`: Number
- `header.elements_spacing.cart.margin_right_unit`: String
- `header.elements_spacing.cart.mobile_margin_right`: Number
- `header.elements_spacing.cart.mobile_margin_right_unit`: String
- `header.elements_spacing.cart.padding_right`: Number
- `header.elements_spacing.cart.padding_right_unit`: String
- `header.elements_spacing.cart.mobile_padding_right`: Number
- `header.elements_spacing.cart.mobile_padding_right_unit`: String
- `header.elements_spacing.cart.margin_bottom`: Number
- `header.elements_spacing.cart.margin_bottom_unit`: String
- `header.elements_spacing.cart.mobile_margin_bottom`: Number
- `header.elements_spacing.cart.mobile_margin_bottom_unit`: String
- `header.elements_spacing.cart.padding_bottom`: Number
- `header.elements_spacing.cart.padding_bottom_unit`: String
- `header.elements_spacing.cart.mobile_padding_bottom`: Number
- `header.elements_spacing.cart.mobile_padding_bottom_unit`: String
- `header.elements_spacing.cart.margin_left`: Number
- `header.elements_spacing.cart.margin_left_unit`: String
- `header.elements_spacing.cart.mobile_margin_left`: Number
- `header.elements_spacing.cart.mobile_margin_left_unit`: String
- `header.elements_spacing.cart.padding_left`: Number
- `header.elements_spacing.cart.padding_left_unit`: String
- `header.elements_spacing.cart.mobile_padding_left`: Number
- `header.elements_spacing.cart.mobile_padding_left_unit`: String
- `header.elements_spacing.button.margin_top`: Number
- `header.elements_spacing.button.margin_top_unit`: String
- `header.elements_spacing.button.mobile_margin_top`: Number
- `header.elements_spacing.button.mobile_margin_top_unit`: String
- `header.elements_spacing.button.padding_top`: Number
- `header.elements_spacing.button.padding_top_unit`: String
- `header.elements_spacing.button.mobile_padding_top`: Number
- `header.elements_spacing.button.mobile_padding_top_unit`: String
- `header.elements_spacing.button.margin_right`: Number
- `header.elements_spacing.button.margin_right_unit`: String
- `header.elements_spacing.button.mobile_margin_right`: Number
- `header.elements_spacing.button.mobile_margin_right_unit`: String
- `header.elements_spacing.button.padding_right`: Number
- `header.elements_spacing.button.padding_right_unit`: String
- `header.elements_spacing.button.mobile_padding_right`: Number
- `header.elements_spacing.button.mobile_padding_right_unit`: String
- `header.elements_spacing.button.margin_bottom`: Number
- `header.elements_spacing.button.margin_bottom_unit`: String
- `header.elements_spacing.button.mobile_margin_bottom`: Number
- `header.elements_spacing.button.mobile_margin_bottom_unit`: String
- `header.elements_spacing.button.padding_bottom`: Number
- `header.elements_spacing.button.padding_bottom_unit`: String
- `header.elements_spacing.button.mobile_padding_bottom`: Number
- `header.elements_spacing.button.mobile_padding_bottom_unit`: String
- `header.elements_spacing.button.margin_left`: Number
- `header.elements_spacing.button.margin_left_unit`: String
- `header.elements_spacing.button.mobile_margin_left`: Number
- `header.elements_spacing.button.mobile_margin_left_unit`: String
- `header.elements_spacing.button.padding_left`: Number
- `header.elements_spacing.button.padding_left_unit`: String
- `header.elements_spacing.button.mobile_padding_left`: Number
- `header.elements_spacing.button.mobile_padding_left_unit`: String
- `header.elements_spacing.menuicon.margin_top`: Number
- `header.elements_spacing.menuicon.margin_top_unit`: String
- `header.elements_spacing.menuicon.mobile_margin_top`: Number
- `header.elements_spacing.menuicon.mobile_margin_top_unit`: String
- `header.elements_spacing.menuicon.padding_top`: Number
- `header.elements_spacing.menuicon.padding_top_unit`: String
- `header.elements_spacing.menuicon.mobile_padding_top`: Number
- `header.elements_spacing.menuicon.mobile_padding_top_unit`: String
- `header.elements_spacing.menuicon.margin_right`: Number
- `header.elements_spacing.menuicon.margin_right_unit`: String
- `header.elements_spacing.menuicon.mobile_margin_right`: Number
- `header.elements_spacing.menuicon.mobile_margin_right_unit`: String
- `header.elements_spacing.menuicon.padding_right`: Number
- `header.elements_spacing.menuicon.padding_right_unit`: String
- `header.elements_spacing.menuicon.mobile_padding_right`: Number
- `header.elements_spacing.menuicon.mobile_padding_right_unit`: String
- `header.elements_spacing.menuicon.margin_bottom`: Number
- `header.elements_spacing.menuicon.margin_bottom_unit`: String
- `header.elements_spacing.menuicon.mobile_margin_bottom`: Number
- `header.elements_spacing.menuicon.mobile_margin_bottom_unit`: String
- `header.elements_spacing.menuicon.padding_bottom`: Number
- `header.elements_spacing.menuicon.padding_bottom_unit`: String
- `header.elements_spacing.menuicon.mobile_padding_bottom`: Number
- `header.elements_spacing.menuicon.mobile_padding_bottom_unit`: String
- `header.elements_spacing.menuicon.margin_left`: Number
- `header.elements_spacing.menuicon.margin_left_unit`: String
- `header.elements_spacing.menuicon.mobile_margin_left`: Number
- `header.elements_spacing.menuicon.mobile_margin_left_unit`: String
- `header.elements_spacing.menuicon.padding_left`: Number
- `header.elements_spacing.menuicon.padding_left_unit`: String
- `header.elements_spacing.menuicon.mobile_padding_left`: Number
- `header.elements_spacing.menuicon.mobile_padding_left_unit`: String
- `header.elements_spacing.row1.margin_top`: Number
- `header.elements_spacing.row1.margin_top_unit`: String
- `header.elements_spacing.row1.mobile_margin_top`: Number
- `header.elements_spacing.row1.mobile_margin_top_unit`: String
- `header.elements_spacing.row1.padding_top`: Number
- `header.elements_spacing.row1.padding_top_unit`: String
- `header.elements_spacing.row1.mobile_padding_top`: Number
- `header.elements_spacing.row1.mobile_padding_top_unit`: String
- `header.elements_spacing.row1.margin_right`: Number
- `header.elements_spacing.row1.margin_right_unit`: String
- `header.elements_spacing.row1.mobile_margin_right`: Number
- `header.elements_spacing.row1.mobile_margin_right_unit`: String
- `header.elements_spacing.row1.padding_right`: Number
- `header.elements_spacing.row1.padding_right_unit`: String
- `header.elements_spacing.row1.mobile_padding_right`: Number
- `header.elements_spacing.row1.mobile_padding_right_unit`: String
- `header.elements_spacing.row1.margin_bottom`: Number
- `header.elements_spacing.row1.margin_bottom_unit`: String
- `header.elements_spacing.row1.mobile_margin_bottom`: Number
- `header.elements_spacing.row1.mobile_margin_bottom_unit`: String
- `header.elements_spacing.row1.padding_bottom`: Number
- `header.elements_spacing.row1.padding_bottom_unit`: String
- `header.elements_spacing.row1.mobile_padding_bottom`: Number
- `header.elements_spacing.row1.mobile_padding_bottom_unit`: String
- `header.elements_spacing.row1.margin_left`: Number
- `header.elements_spacing.row1.margin_left_unit`: String
- `header.elements_spacing.row1.mobile_margin_left`: Number
- `header.elements_spacing.row1.mobile_margin_left_unit`: String
- `header.elements_spacing.row1.padding_left`: Number
- `header.elements_spacing.row1.padding_left_unit`: String
- `header.elements_spacing.row1.mobile_padding_left`: Number
- `header.elements_spacing.row1.mobile_padding_left_unit`: String
- `header.elements_spacing.row2.margin_top`: Number
- `header.elements_spacing.row2.margin_top_unit`: String
- `header.elements_spacing.row2.mobile_margin_top`: Number
- `header.elements_spacing.row2.mobile_margin_top_unit`: String
- `header.elements_spacing.row2.padding_top`: Number
- `header.elements_spacing.row2.padding_top_unit`: String
- `header.elements_spacing.row2.mobile_padding_top`: Number
- `header.elements_spacing.row2.mobile_padding_top_unit`: String
- `header.elements_spacing.row2.margin_right`: Number
- `header.elements_spacing.row2.margin_right_unit`: String
- `header.elements_spacing.row2.mobile_margin_right`: Number
- `header.elements_spacing.row2.mobile_margin_right_unit`: String
- `header.elements_spacing.row2.padding_right`: Number
- `header.elements_spacing.row2.padding_right_unit`: String
- `header.elements_spacing.row2.mobile_padding_right`: Number
- `header.elements_spacing.row2.mobile_padding_right_unit`: String
- `header.elements_spacing.row2.margin_bottom`: Number
- `header.elements_spacing.row2.margin_bottom_unit`: String
- `header.elements_spacing.row2.mobile_margin_bottom`: Number
- `header.elements_spacing.row2.mobile_margin_bottom_unit`: String
- `header.elements_spacing.row2.padding_bottom`: Number
- `header.elements_spacing.row2.padding_bottom_unit`: String
- `header.elements_spacing.row2.mobile_padding_bottom`: Number
- `header.elements_spacing.row2.mobile_padding_bottom_unit`: String
- `header.elements_spacing.row2.margin_left`: Number
- `header.elements_spacing.row2.margin_left_unit`: String
- `header.elements_spacing.row2.mobile_margin_left`: Number
- `header.elements_spacing.row2.mobile_margin_left_unit`: String
- `header.elements_spacing.row2.padding_left`: Number
- `header.elements_spacing.row2.padding_left_unit`: String
- `header.elements_spacing.row2.mobile_padding_left`: Number
- `header.elements_spacing.row2.mobile_padding_left_unit`: String
- `header.elements_spacing.banner.margin_top`: Number
- `header.elements_spacing.banner.margin_top_unit`: String
- `header.elements_spacing.banner.mobile_margin_top`: Number
- `header.elements_spacing.banner.mobile_margin_top_unit`: String
- `header.elements_spacing.banner.padding_top`: Number
- `header.elements_spacing.banner.padding_top_unit`: String
- `header.elements_spacing.banner.mobile_padding_top`: Number
- `header.elements_spacing.banner.mobile_padding_top_unit`: String
- `header.elements_spacing.banner.margin_right`: Number
- `header.elements_spacing.banner.margin_right_unit`: String
- `header.elements_spacing.banner.mobile_margin_right`: Number
- `header.elements_spacing.banner.mobile_margin_right_unit`: String
- `header.elements_spacing.banner.padding_right`: Number
- `header.elements_spacing.banner.padding_right_unit`: String
- `header.elements_spacing.banner.mobile_padding_right`: Number
- `header.elements_spacing.banner.mobile_padding_right_unit`: String
- `header.elements_spacing.banner.margin_bottom`: Number
- `header.elements_spacing.banner.margin_bottom_unit`: String
- `header.elements_spacing.banner.mobile_margin_bottom`: Number
- `header.elements_spacing.banner.mobile_margin_bottom_unit`: String
- `header.elements_spacing.banner.padding_bottom`: Number
- `header.elements_spacing.banner.padding_bottom_unit`: String
- `header.elements_spacing.banner.mobile_padding_bottom`: Number
- `header.elements_spacing.banner.mobile_padding_bottom_unit`: String
- `header.elements_spacing.banner.margin_left`: Number
- `header.elements_spacing.banner.margin_left_unit`: String
- `header.elements_spacing.banner.mobile_margin_left`: Number
- `header.elements_spacing.banner.mobile_margin_left_unit`: String
- `header.elements_spacing.banner.padding_left`: Number
- `header.elements_spacing.banner.padding_left_unit`: String
- `header.elements_spacing.banner.mobile_padding_left`: Number
- `header.elements_spacing.banner.mobile_padding_left_unit`: String
- `header.nav_links_spacing`: Object[]
  - `nav`: String
  - `margin_top`: Number
  - `margin_top_unit`: String
  - `mobile_margin_top`: Number
  - `mobile_margin_top_unit`: String
  - `padding_top`: Number
  - `padding_top_unit`: String
  - `mobile_padding_top`: Number
  - `mobile_padding_top_unit`: String
  - `margin_right`: Number
  - `margin_right_unit`: String
  - `mobile_margin_right`: Number
  - `mobile_margin_right_unit`: String
  - `padding_right`: Number
  - `padding_right_unit`: String
  - `mobile_padding_right`: Number
  - `mobile_padding_right_unit`: String
  - `margin_bottom`: Number
  - `margin_bottom_unit`: String
  - `mobile_margin_bottom`: Number
  - `mobile_margin_bottom_unit`: String
  - `padding_bottom`: Number
  - `padding_bottom_unit`: String
  - `mobile_padding_bottom`: Number
  - `mobile_padding_bottom_unit`: String
  - `margin_left`: Number
  - `margin_left_unit`: String
  - `mobile_margin_left`: Number
  - `mobile_margin_left_unit`: String
  - `padding_left`: Number
  - `padding_left_unit`: String
  - `mobile_padding_left`: Number
  - `mobile_padding_left_unit`: String
  - `_id`: ObjectId
- `header.searchInputColor`: String, default "#fff"
- `header.searchInputBackground`: String, default "#dcdcdc"
- `header.searchInputPosition`: String, default "bottom"
- `header.searchExpanded`: Boolean, default false
- `header.showCartTotal`: Boolean, default false
- `header.cartTotalPosition`: String, one of  | left, default ""
- `header.cartTotalGap`: Number
- `header.sidemenuBackground`: String
- `header.sidemenuText`: String
- `header.sidemenuPanelBackground`: String
- `header.sidemenuPanelText`: String
- `header.sidemenuFontSize`: Number
- `header.sidemenuFontWeight`: String
- `header.sidemenuRowGap`: Number
- `header.sidemenuIconGap`: Number
- `header.sidemenuGroupGap`: Number
- `header.sidemenuGroupFontFamily`: String
- `header.sidemenuGroupFontSize`: Number
- `header.sidemenuGroupTextTransform`: String
- `header.sidemenuGroupColor`: String
- `header.sidemenuGroupFontWeight`: String
- `header.dropdownRadius`: Number
- `header.dropdownFontFamily`: String
- `header.dropdownFontSize`: Number
- `header.dropdownItemGap`: Number
- `header.dropdownPaddingX`: Number
- `header.dropdownPaddingY`: Number
- `header.searchInputMaxWidth`: Number
- `header.searchInputBorderRadius`: String
- `header.bar_menus`: Object[]
  - `nav`: String
  - `position`: String
  - `value`: Number
  - `mobile_value`: Number
  - `hideIcon`: Boolean, default false
  - `hideTitle`: Boolean, default false
  - `font_size`: Number
  - `_id`: ObjectId
- `partners.gridStyle`: String, default "row"
- `partners.align`: String, default "left"
- `partners.name`: String, default "right"
- `partners.image`: String, default "left"
- `partners.description`: String, default "right"
- `partners.title`: String, default "bottom"
- `partners.showSearch`: Boolean, default true
- `partners.showCategories`: Boolean, default true
- `partners.showMap`: Boolean, default true
- `partners.perPage`: Number, default 9
- `partners.sort`: String, default "name:1"
- `contacts.map`: Boolean, default true
- `contacts.partners`: Boolean, default true
- `price_plan.title`: String, default "top"
- `price_plan.description`: String, default "top"
- `price_plan.plan_features_style`: String, default "0"
- `price_plan.rating`: Boolean, default false
- `price_plan.ratingList`: Boolean, default false
- `price_plan.image`: Boolean, default false
- `price_plan.about_page`: ObjectId, → AboutPage
- `price_plan.header`: ObjectId, → AboutPage
- `backgroundGradient.enabled`: Boolean, default false
- `backgroundGradient.degrees`: Number
- `backgroundGradient.colors`: Object[]
  - `color`: String
  - `percentage`: Number
  - `_id`: ObjectId
- `backgroundGradient.css`: String
- `backgroundImage`: String, default "" - Background picture.
- `backgroundVideo`: String, default "" - Background video.
- `backgroundAttachment`: String, default "fixed" - Whether the background scrolls or stays fixed.
- `backgroundOpacity`: Number, default 1 - Opacity of the background picture or video.
- `transparentCard`: Boolean, default false - Cards are see-through.
- `cardColor`: String - Opacity of cards, from 0 to 1.
- `cardColor_color`: String - Card colour.
- `cardColor_color_darkmode`: String - Card colour in dark mode.
- `showMorePages`: Boolean, default true - Shows the More pages menu.
- `allow_darkmode`: Boolean, default false - Allows site/app to switch between light and dark mode, default value is false.
- `use_darkmode_on_site`: Boolean, default false - Allows the site to switch between light and dark mode, default value is false.
- `programs.rating`: Boolean, default false
- `programs.titleColor`: String
- `programs.descriptionColor`: String
- `programs.borderRadius`: String
- `programs.titleFontSize`: String
- `programs.descriptionFontSize`: String
- `programs.titleFontWeight`: String
- `programs.descriptionFontWeight`: String
- `programs.cardBorderRadius`: String
- `programs.cardBorderWidth`: String
- `programs.cardBorderColor`: String
- `programs.cardBackgroundColor`: String
- `programs.imageAspectRatio`: String
- `programs.customCss`: String
- `programs.sort`: Number, default -1
- `programs.showBreadCrumbs`: Boolean, default true
- `programs.filtersBackgroundColor`: String
- `programs.filtersTextColor`: String
- `programs.filtersBorderRadius`: String
- `programs.boxShadowColor`: String
- `programs.boxShadowOffsetX`: Number, default 0
- `programs.boxShadowOffsetY`: Number, default 0
- `programs.boxShadowBlurRadius`: String
- `programs.boxShadowSpreadRadius`: String
- `programs.imagePadding`: Number, default 0
- `programs.categories.layout`: String, one of list | columns, default "list"
- `programs.categories.showHeading`: Boolean, default true
- `programs.categories.showSubtitle`: Boolean, default true
- `programs.categories.showImage`: Boolean, default false
- `programs.categories.imageSize`: String, default "50px"
- `programs.categories.imageRadius`: String
- `programs.categories.imageAspectRatio`: String, default "1/1"
- `programs.categories.imageFit`: String, one of cover | contain, default "cover"
- `programs.categories.imagePadding`: Number, default 0
- `programs.categories.fallback`: String, one of initial | color | none, default "initial"
- `programs.categories.showChevron`: Boolean, default true
- `programs.categories.titleColor`: String
- `programs.categories.titleFontSize`: String
- `programs.categories.titleFontWeight`: String
- `programs.categories.cardBackgroundColor`: String
- `programs.categories.cardBorderRadius`: String
- `programs.categories.cardBorderWidth`: String
- `programs.categories.cardBorderColor`: String
- `programs.categories.customCss`: String
- `programs.categories.site.showImage`: Boolean, default true
- `programs.categories.site.imageSize`: String
- `programs.categories.site.imageAspectRatio`: String
- `programs.categories.site.titleColor`: String
- `programs.categories.site.titleFontSize`: String
- `programs.categories.site.titleFontWeight`: String
- `programs.categories.site.cardBackgroundColor`: String
- `programs.categories.site.cardBorderRadius`: String
- `programs.categories.site.cardBorderWidth`: String
- `programs.categories.site.cardBorderColor`: String
- `programs.categories.site.cardPadding`: String
- `programs.categories.site.gap`: String
- `programs.categories.site.align`: String, one of left | center | right
- `programs.categories.site.titleTransform`: String, one of uppercase | lowercase | capitalize
- `programs.showViews`: Boolean, default false
- `programs.viewsColor`: String
- `headerA_secondary`: String, default "#f4f5f8" - Secondary header gradient start.
- `headerB_secondary`: String, default "#f4f5f8" - Secondary header gradient end.
- `headerA_secondary_darkmode`: String, default "#f4f5f8" - The same in dark mode.
- `headerB_secondary_darkmode`: String, default "#f4f5f8" - The same in dark mode.
- `headerText_secondary`: String - Secondary header text colour.
- `headerText_secondary_darkmode`: String - The same in dark mode.
- `tabs.allow_custom_tabs_color`: Boolean, default false
- `tabs.background`: String
- `tabs.background_checked`: String
- `tabs.color`: String
- `tabs.color_checked`: String
- `tabs.indicator_color`: String
- `tabs.hide_text`: Boolean, default false
- `tabs.hide_home`: Boolean, default false
- `tabs.button_spacing_vertical`: Number, default 0
- `tabs.button_spacing_horizontal`: Number, default 0
- `tabs.button_border_radius`: Number, default 0
- `tabs.navigations.home.icon`: String
- `tabs.navigations.home.img`: ObjectId, → Media
- `tabs.navigations.explore.icon`: String
- `tabs.navigations.explore.img`: ObjectId, → Media
- `tabs.navigations.bites.icon`: String
- `tabs.navigations.bites.img`: ObjectId, → Media
- `tabs.navigations.videos.icon`: String
- `tabs.navigations.videos.img`: ObjectId, → Media
- `tabs.navigations.groups.icon`: String
- `tabs.navigations.groups.img`: ObjectId, → Media
- `tabs.navigations.vouchers.icon`: String
- `tabs.navigations.vouchers.img`: ObjectId, → Media
- `tabs.navigations.store.icon`: String
- `tabs.navigations.store.img`: ObjectId, → Media
- `tabs.navigations.programs.icon`: String
- `tabs.navigations.programs.img`: ObjectId, → Media
- `tabs.navigations.services.icon`: String
- `tabs.navigations.services.img`: ObjectId, → Media
- `tabs.navigations.blogposts.icon`: String
- `tabs.navigations.blogposts.img`: ObjectId, → Media
- `tabs.navigations.subscriptions.icon`: String
- `tabs.navigations.subscriptions.img`: ObjectId, → Media
- `tabs.navigations.events.icon`: String
- `tabs.navigations.events.img`: ObjectId, → Media
- `tabs.navigations.playlists.icon`: String
- `tabs.navigations.playlists.img`: ObjectId, → Media
- `tabs.navigations.user.icon`: String
- `tabs.navigations.user.img`: ObjectId, → Media
- `tabs.navigations.partners.icon`: String
- `tabs.navigations.partners.img`: ObjectId, → Media
- `tabs.navigations.contacts.icon`: String
- `tabs.navigations.contacts.img`: ObjectId, → Media
- `tabs.navigations.tracker.icon`: String
- `tabs.navigations.tracker.img`: ObjectId, → Media
- `tabs.navigations.mini_apps.icon`: String
- `tabs.navigations.mini_apps.img`: ObjectId, → Media
- `tabs.navigations.more.icon`: String
- `tabs.navigations.more.img`: ObjectId, → Media
- `tabs.navigations.claims.icon`: String
- `tabs.navigations.claims.img`: ObjectId, → Media
- `tabs.navigations.professional_pages.icon`: String
- `tabs.navigations.professional_pages.img`: ObjectId, → Media
- `tabs.navigations.bookings.icon`: String
- `tabs.navigations.bookings.img`: ObjectId, → Media
- `customDropdown_background`: String, default "#fff" - Background of custom dropdown menus.
- `customDropdown_text`: String, default "#212529" - Text colour of custom dropdown menus.
- `products_partial.showCart`: Boolean, default false
- `products_partial.swiper.enabled`: Boolean, default false
- `products_partial.swiper.loop`: Boolean, default false
- `products_partial.swiper.showControls`: Boolean, default false
- `products_partial.brand`: Boolean, default true
- `breadCrumbs_backgroundColor`: String, default "#e8ebf0" - Breadcrumbs background.
- `breadCrumbs_textColor`: String, default "#97a0b0" - Breadcrumbs text colour.
- `breadCrumbs_darkmode_backgroundColor`: String, default "#e8ebf0" - Breadcrumbs background in dark mode.
- `breadCrumbs_darkmode_textColor`: String, default "#97a0b0" - Breadcrumbs text colour in dark mode.
- `cardColor_secondary`: String, default "#757c8d" - Secondary card colour.
- `cardColor_secondary_darkmode`: String, default "#757c8d" - Secondary card colour in dark mode.
- `show_inapp_message`: Boolean, default true - Shows the in-app message banner.
- `groups.participants`: Boolean, default true
- `groups.description`: Boolean, default false
- `service_categories.gridStyle`: String, default "row"
- `service_categories.titleFontSize`: String
- `service_categories.titleFontWeight`: String
- `service_categories.cardBorderRadius`: String
- `service_categories.cardBorderWidth`: String
- `service_categories.cardBorderColor`: String
- `service_categories.cardBackgroundColor`: String
- `service_categories.imageAspectRatio`: String
- `service_categories.customCss`: String
- `service_categories.cardPadding`: Number
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Tracker

A progress tracker users fill in - what is measured, its unit and goal.

- `title`: String, required - Name of the tracker.
- `unit`: String - Unit the progress is measured in (kg, km, pages).
- `score_direction`: String, one of up | down, default "down" - One of: up, down.
- `goal_definition.label`: String
- `goal_definition.type`: String
- `goal_definition.options`: Object[]
  - `text`: String
  - `value`: String
  - `_id`: ObjectId
- `additional_fields`: Object[] - Extra fields users fill in with each entry.
  - `label`: String
  - `type`: String
  - `options`: Object[]
    - `text`: String
    - `value`: String
    - `_id`: ObjectId
  - `_id`: ObjectId
- `body`: String - Explanation shown to users.
- `video`: ObjectId, → Video - Video.id.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Voucher

- `title`: String - Title of voucher.
- `body`: String - Body of voucher.
- `media`: ObjectId - Attached media object with id.
- `show_to`: String, default "0" - Attached media object with id.
- `coupon`: ObjectId, → Coupon - Attached Coupon id.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date
