---
title: "Insert footer element"
method: POST
path: "/api/sites/multiscreen/v2/{site_name}/footer/elements"
tags: ["Page Elements Api V2"]
---

# Insert footer element

`POST /api/sites/multiscreen/v2/{site_name}/footer/elements`

## Request

- Base URL: `https://api.duda.co`
- URL: `https://api.duda.co/api/sites/multiscreen/v2/{site_name}/footer/elements`
- Auth: HTTP basic

Adds a new element (Section, Column, or Widget) to the site footer.

## Path parameters

- `site_name` string, required

## Request body

- union
  - object
    - `children` InsertElementSchema[]: Nested child elements to insert together with this element in a single request. Enables inserting an entire element hierarchy (e.g. a section with its columns and widgets) in one call.
    - `connected_data` SectionElementBinding: Data bindings for SECTION element
      - `style` SectionElementBindingStyle: Data bindings for SECTION style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` SectionElementProps
      - `data` SectionElementPropsData: Data properties for SECTION element
      - `style` SectionElementPropsStyle: Style properties for SECTION element
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsSectionElementPropsBreakpointPropsSectionElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` SectionElementPropsMobileBreakpointProps
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSectionSize: Size properties for section element
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` SectionElementPropsBreakpointProps: Responsive style overrides for SECTION element
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `column_gap` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSectionSize: Size properties for section element
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSectionSize: Size properties for section element
          - `max_width` string
          - `min_height` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `connected_data` ColumnElementBinding: Data bindings for COLUMN element
      - `style` ColumnElementBindingStyle: Data bindings for COLUMN style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` ColumnElementProps
      - `data` ColumnElementPropsData: Data properties for COLUMN element
      - `style` ColumnElementPropsStyle: Style properties for COLUMN element
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsColumnElementPropsBreakpointPropsColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` ColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` ColumnElementPropsBreakpointProps: Responsive style overrides for COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `connected_data` InnerColumnElementBinding: Data bindings for INNER_COLUMN element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` InnerColumnElementProps
      - `data` InnerColumnElementPropsData: Data properties for INNER_COLUMN element
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` AdvancedAccordionProps
      - `data` AdvancedAccordionPropsData: Data properties for ADVANCED_ACCORDION container
        - `expand_first_by_default` boolean
        - `expand_one_at_atime` boolean
      - `style` AdvancedAccordionPropsStyle: Style properties for ADVANCED_ACCORDION container
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsAdvancedContainerStyleBreakpointPropsAdvancedContainerStyleMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` AdvancedContainerStyleMobileBreakpointProps
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `hidden` boolean
            - `size` AdvancedContainerSize
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` AdvancedContainerStyleBreakpointProps: Responsive style overrides for advanced containers
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `hidden` boolean
            - `size` AdvancedContainerSize
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `frame` FrameStyles
          - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
          - `background` StylesContainerBackground: Container background properties
            - `color` string
            - `gradient` string
            - `image` ContainerImageBackground
              - …
            - `overlay` BackgroundOverlay
              - …
            - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
              - …
            - `video` VideoBackground
              - …
          - `border` StylesContainerBorder: Border properties for elements
            - `color` string
            - `radius` string
            - `width` string
          - `box_shadow` string
          - `direction` 'ltr' | 'rtl'
          - `size` AdvancedContainerSize
            - `min_height` string
            - `width` string
          - `spacing` StylesContainerSpacing: Container spacing properties
            - `margin_bottom` string
            - `margin_left` string
            - `margin_right` string
            - `margin_top` string
            - `padding_bottom` string
            - `padding_left` string
            - `padding_right` string
            - `padding_top` string
        - `header_styles` HeaderStyles
          - `border` Border
            - `color` string
            - `width` string
          - `color` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
        - `title` ItemTitleStyles
          - `color` string
          - `font_family` string
          - `font_size` string
          - `font_style` string
          - `font_weight` string
          - `tag` 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
          - `text_align` 'left' | 'center' | 'right'
          - `text_decoration` string
        - `toggle_icon` ToggleIcon
          - `color` string
          - `height` string
          - `width` string
  - object
    - `connected_data` AdvancedAccordionItemBinding: Data bindings for ADVANCED_ACCORDION_ITEM element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` AdvancedAccordionItemProps: Advanced accordion item element properties
      - `data` AdvancedAccordionItemPropsData: Data properties for ADVANCED_ACCORDION_ITEM element
        - `title` string: Title for the accordion item
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` AdvancedTabsProps
      - `data` AdvancedTabsPropsData: Data properties for ADVANCED_TABS container
      - `style` AdvancedContainerStyle
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsAdvancedContainerStyleBreakpointPropsAdvancedContainerStyleMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` AdvancedContainerStyleMobileBreakpointProps
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `hidden` boolean
            - `size` AdvancedContainerSize
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` AdvancedContainerStyleBreakpointProps: Responsive style overrides for advanced containers
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `hidden` boolean
            - `size` AdvancedContainerSize
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `frame` FrameStyles
          - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
          - `background` StylesContainerBackground: Container background properties
            - `color` string
            - `gradient` string
            - `image` ContainerImageBackground
              - …
            - `overlay` BackgroundOverlay
              - …
            - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
              - …
            - `video` VideoBackground
              - …
          - `border` StylesContainerBorder: Border properties for elements
            - `color` string
            - `radius` string
            - `width` string
          - `box_shadow` string
          - `direction` 'ltr' | 'rtl'
          - `size` AdvancedContainerSize
            - `min_height` string
            - `width` string
          - `spacing` StylesContainerSpacing: Container spacing properties
            - `margin_bottom` string
            - `margin_left` string
            - `margin_right` string
            - `margin_top` string
            - `padding_bottom` string
            - `padding_left` string
            - `padding_right` string
            - `padding_top` string
        - `title` ItemTitleStyles
          - `color` string
          - `font_family` string
          - `font_size` string
          - `font_style` string
          - `font_weight` string
          - `tag` 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
          - `text_align` 'left' | 'center' | 'right'
          - `text_decoration` string
  - object
    - `connected_data` AdvancedTabsItemBinding: Data bindings for ADVANCED_TABS_ITEM element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` AdvancedTabsItemProps
      - `data` AdvancedTabsItemPropsData: Data properties for ADVANCED_TABS_ITEM element
        - `title` string: Title for the tab item
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `connected_data` FormStepElementBinding: Data bindings for FORM_STEP element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` FormStepElementProps
      - `data` FormStepElementPropsData: Data properties for FORM_STEP props
        - `step_type` 'REGULAR' | 'SUCCESS' | 'ERROR': Form step type for FORM_STEP elements
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `connected_data` FormButtonsContainerElementBinding: Data bindings for FORM_BUTTONS_CONTAINER element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` FormButtonsContainerElementProps
      - `data` FormButtonsContainerElementPropsData: Data properties for FORM_BUTTONS_CONTAINER props
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `connected_data` FormElementBinding: Data bindings for FORM_ELEMENT element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` FormElementProps
      - `data` FormElementPropsData: Data properties for FORM_ELEMENT props
        - `email_settings` FormElementPropsEmailSettings: Email configuration for form submissions
          - `auto_reply` FormElementPropsAutoReply: Auto-reply configuration for form submitters
            - `enabled` boolean: Enable automatic reply to form submitters
            - `include_form_copy` boolean: Include a copy of the submitted form data in the auto-reply
            - `message` string: Message body of the auto-reply email, as HTML.
            - `sender_name` string: Name displayed in the 'From' field of auto-reply emails
            - `subject` string: Subject line for auto-reply email
          - `recipient_settings` FormElementPropsRecipientSettings: Recipient configuration for form submission emails
            - `recipient_emails` string[]: List of recipient email addresses for form submissions (e.g., ['contact@example.com', 'admin@example.com'])
            - `sender_name` string: Name displayed in the 'From' field of submission emails
            - `subject` string: Email subject line for form submissions
            - `use_content_library_email` boolean: Use content library primary email as fallback when recipient list is empty
        - `form_id` string: Unique identifier for the form, generated at creation (e.g., 'advanced_form_7496c9fd'). Read-only — do not send it on insert or update.
        - `title` string: Form title for reporting and internal identification (e.g., 'Contact Us Form')
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `connected_data` ImageWidgetBinding: Data bindings for IMAGE widget
      - `data` ImageWidgetBindingData: Data bindings for IMAGE widget data props
        - `alt` TextBinding: Binds a text prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the text value comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
        - `link` LinkBinding: Binds a link prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the link value comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
        - `src` ImageBinding: Binds an image prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` ImageWidgetProps
      - `data` ImageWidgetPropsData: Data properties for IMAGE widget
        - `alt` string
        - `image_dimensions` ImageWidgetPropsImageDimensions: Intrinsic pixel size of the image file at src (the browser naturalWidth x naturalHeight), stored as the img width/height attributes. This is not the rendered size of the element; set that with style.size.
          - `height` integer, required: Height of the image file in pixels
          - `width` integer, required: Width of the image file in pixels
        - `link` ButtonWidgetPropsLink: Link properties for BUTTON widget
          - `href` string
          - `rel` string
          - `target` string
          - `type` string
        - `src` string
      - `style` ImageWidgetPropsStyle: Style properties for IMAGE widget
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `border` ImageWidgetPropsBorder: Border properties for IMAGE widget
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsStylesCommonBreakpointPropsStylesCommonMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` StylesCommonMobileBreakpointProps
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `flex` string
            - `hidden` boolean
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
          - `tablet` StylesCommonBreakpointProps: Common responsive style overrides (alignment, size, spacing)
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `flex` string
            - `hidden` boolean
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
        - `flex` string
        - `hover` ImageWidgetPropsHover: Hover properties for IMAGE widget
          - `effect` 'NONE' | 'ZOOM_OUT' | 'OPACITY' | 'FLOAT' | 'FORWARD' | 'GRAYSCALE' | 'REVERSE_GRAYSCALE' | 'BLUR' | 'GRAYSCALE_BLUR': Hover effect options for widgets
        - `object_fit` 'none' | 'cover' | 'contain'
        - `object_position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesSpacing: Spacing properties for elements
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `connected_data` ParagraphWidgetBinding: Data bindings for PARAGRAPH widget
      - `data` ParagraphWidgetBindingData: Data bindings for PARAGRAPH widget data props
        - `content` TextBinding: Binds a text prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the text value comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` ParagraphWidgetProps
      - `data` ParagraphWidgetPropsData: Data properties for PARAGRAPH widget
        - `content` string
      - `style` ParagraphWidgetPropsStyle: Style properties for PARAGRAPH widget
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesBackground: Background properties for elements
          - `color` string
          - `gradient` string
          - `image` BackgroundImage
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
        - `border` StylesBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsParagraphWidgetPropsBreakpointPropsParagraphWidgetPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` ParagraphWidgetPropsMobileBreakpointProps
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `flex` string
            - `hidden` boolean
            - `size` ParagraphWidgetPropsSize: Size properties for PARAGRAPH widget
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
            - `text` ParagraphWidgetPropsText: Typography for a paragraph bound to connected data. Accepted and returned only when connected_data.data.content is set; unbound text is styled inline in data.content.
              - …
          - `tablet` ParagraphWidgetPropsBreakpointProps: Responsive style overrides for PARAGRAPH widget
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `flex` string
            - `hidden` boolean
            - `size` ParagraphWidgetPropsSize: Size properties for PARAGRAPH widget
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
            - `text` ParagraphWidgetPropsText: Typography for a paragraph bound to connected data. Accepted and returned only when connected_data.data.content is set; unbound text is styled inline in data.content.
              - …
        - `flex` string
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `size` ParagraphWidgetPropsSize: Size properties for PARAGRAPH widget
          - `max_width` string
          - `min_width` string
          - `width` string
        - `spacing` StylesSpacing: Spacing properties for elements
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
        - `text` ParagraphWidgetPropsText: Typography for a paragraph bound to connected data. Accepted and returned only when connected_data.data.content is set; unbound text is styled inline in data.content.
          - `color` string
          - `direction` 'ltr' | 'rtl'
          - `font_family` string
          - `font_size` string
          - `font_style` string
          - `font_weight` string
          - `text_align` 'left' | 'center' | 'right' | 'justify'
          - `text_decoration` string
  - object
    - `connected_data` PhotoGalleryWidgetBinding: Data bindings for PHOTO_GALLERY widget
      - `data` PhotoGalleryWidgetBindingData: Data bindings for PHOTO_GALLERY widget data props
        - `images` ListBindingPhotoGalleryWidgetBindingImageInfo: Binds a list-valued prop to a collection and maps row fields onto its items
          - `collection` string: Site collection name; required when source is COLLECTION. The ordinary case — use this on any page not itself bound to a collection row
          - `field` string: Collection-typed field of the current row of the page's dynamic collection — an inner collection; required when source is DYNAMIC_PAGE
          - `item` PhotoGalleryWidgetBindingImageInfo: Per-item field bindings for PHOTO_GALLERY images
            - `alt` TextBinding: Binds a text prop to a dynamic data field
              - …
            - `button` PhotoGalleryWidgetBindingButton: Bindings for PHOTO_GALLERY item button
              - …
            - `description` PhotoGalleryWidgetBindingDescription: Bindings for PHOTO_GALLERY item description
              - …
            - `src` ImageBinding: Binds an image prop to a dynamic data field
              - …
            - `title` PhotoGalleryWidgetBindingTitle: Bindings for PHOTO_GALLERY item title
              - …
          - `query` CollectionQuery: Filter, sort and limit applied when populating a list from a collection
            - `filters` CollectionQueryFilter[]
              - …
            - `limit` integer: Maximum number of items to populate
            - `sort` CollectionQuerySort[]
              - …
          - `source` 'COLLECTION' | 'DYNAMIC_PAGE', required: Where the list items come from
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` PhotoGalleryWidgetProps
      - `data` PhotoGalleryWidgetPropsData: Data properties for PHOTO_GALLERY widget
        - `images` PhotoGalleryWidgetPropsImageInfo[]
          - `alt` string
          - `button` PhotoGalleryWidgetPropsButtonConfig: Button configuration for PHOTO_GALLERY widget
            - `link` ButtonWidgetPropsLink: Link properties for BUTTON widget
              - …
            - `show_button` boolean
            - `text` string
          - `description` PhotoGalleryWidgetPropsDescriptionConfig: Description configuration for PHOTO_GALLERY widget
            - `description` string
            - `show_description` boolean
          - `src` string
          - `title` PhotoGalleryWidgetPropsTitleConfig: Title configuration for PHOTO_GALLERY widget
            - `show_title` boolean
            - `title` string
      - `style` PhotoGalleryWidgetPropsStyle: Style properties for PHOTO_GALLERY widget
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `auto_adjust_columns` boolean
        - `breakpoint_overrides` BreakpointOverridesPhotoGalleryStylesBreakpointPropsPhotoGalleryStylesBreakpointPropsPhotoGalleryStylesMobileBreakpointProps
          - `desktop` PhotoGalleryStylesBreakpointProps: Photo gallery responsive style overrides
            - `caption` PhotoGalleryWidgetPropsCaptionBreakpointProps: Caption breakpoint properties for PHOTO_GALLERY widget
              - …
            - `flex` string
            - `hidden` boolean
            - `image_style` PhotoGalleryStylesBreakpointImageStyle: Photo gallery responsive image style overrides
              - …
          - `mobile` PhotoGalleryStylesMobileBreakpointProps
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `caption` PhotoGalleryWidgetPropsCaptionBreakpointProps: Caption breakpoint properties for PHOTO_GALLERY widget
              - …
            - `flex` string
            - `hidden` boolean
            - `image_style` PhotoGalleryStylesBreakpointImageStyle: Photo gallery responsive image style overrides
              - …
          - `tablet` PhotoGalleryStylesBreakpointProps: Photo gallery responsive style overrides
            - `caption` PhotoGalleryWidgetPropsCaptionBreakpointProps: Caption breakpoint properties for PHOTO_GALLERY widget
              - …
            - `flex` string
            - `hidden` boolean
            - `image_style` PhotoGalleryStylesBreakpointImageStyle: Photo gallery responsive image style overrides
              - …
        - `caption` PhotoGalleryWidgetPropsCaption: Caption properties for PHOTO_GALLERY widget
          - `border` PhotoGalleryWidgetPropsCaptionBorder: Border properties for PHOTO_GALLERY widget caption
            - `color` string
            - `width` string
          - `description` PhotoGalleryTextProperties: Text properties for photo gallery
            - `color` string
            - `direction` 'ltr' | 'rtl'
            - `font_family` string
            - `font_style` string
            - `font_weight` string
            - `text_decoration` string
          - `display` 'BELOW' | 'OVER' | 'ON_HOVER'
          - `hover` PhotoGalleryWidgetPropsCaptionHover: Hover properties for PHOTO_GALLERY widget caption
            - `background` PhotoGalleryWidgetPropsCaptionBackground: Background properties for PHOTO_GALLERY widget caption
              - …
          - `padding` string
          - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
          - `title` PhotoGalleryTextProperties: Text properties for photo gallery
            - `color` string
            - `direction` 'ltr' | 'rtl'
            - `font_family` string
            - `font_style` string
            - `font_weight` string
            - `text_decoration` string
        - `columns` integer
        - `corner_radius` string
        - `flex` string
        - `hover` PhotoGalleryWidgetPropsHover: Hover properties for PHOTO_GALLERY widget
          - `image` PhotoGalleryWidgetPropsImageHover: Image hover properties for PHOTO_GALLERY widget
            - `effect` 'NONE' | 'ZOOM_OUT' | 'GRAYSCALE' | 'REVERSE_GRAYSCALE' | 'BLUR' | 'GRAYSCALE_BLUR' | 'OPACITY' | 'SHINE'
        - `image` PhotoGalleryWidgetPropsImageStyles: Image styles for PHOTO_GALLERY widget
          - `animation` 'NONE' | 'BOUNCE' | 'FLASH' | 'PULSE' | 'RUBBER_BAND' | 'SHAKE' | 'SWING' | 'TADA' | 'WOBBLE' | 'BOUNCE_IN' | 'BOUNCE_IN_LEFT' | 'BOUNCE_IN_RIGHT' | 'FADE_IN' | 'FADE_IN_LEFT' | 'FADE_IN_RIGHT' | 'FADE_IN_UP' | 'FLIP_IN_X' | 'FLIP_IN_Y' | 'ROTATE_IN' | 'ROTATE_IN_DOWN_LEFT' | 'ROTATE_IN_DOWN_RIGHT' | 'ROTATE_IN_UP_LEFT' | 'ROTATE_IN_UP_RIGHT' | 'ROLL_IN' | 'ZOOM_IN' | 'ZOOM_IN_UP' | 'SLIDE_IN_DOWN' | 'SLIDE_IN_LEFT' | 'SLIDE_IN_RIGHT': Animation options shared across widgets
          - `size` 'cover' | 'contain'
        - `layout` 'SQUARE' | 'CLASSIC_ROUNDED' | 'CLASSIC_DROPS' | 'VERTICAL' | 'VERTICAL_ROUNDED' | 'PANORAMIC' | 'ASYMMETRIC_2' | 'ASYMMETRIC_3' | 'PINTEREST' | 'PINTEREST_ROUNDED'
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesSpacing: Spacing properties for elements
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
        - `visible_rows` integer
  - object
    - `connected_data` ButtonWidgetBinding: Data bindings for BUTTON widget
      - `data` ButtonWidgetBindingData: Data bindings for BUTTON widget data props
        - `link` LinkBinding: Binds a link prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the link value comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
        - `text` TextBinding: Binds a text prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the text value comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` ButtonWidgetProps
      - `data` ButtonWidgetPropsData: Data properties for BUTTON widget
        - `link` ButtonWidgetPropsLink: Link properties for BUTTON widget
          - `href` string
          - `rel` string
          - `target` string
          - `type` string
        - `text` string
      - `style` ButtonWidgetPropsStyle: Style properties for BUTTON widget
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesBackground: Background properties for elements
          - `color` string
          - `gradient` string
          - `image` BackgroundImage
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
        - `border` ButtonWidgetPropsBorder: Border properties for BUTTON widget
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsButtonWidgetPropsBreakpointPropsButtonWidgetPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` ButtonWidgetPropsMobileBreakpointProps
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `flex` string
            - `hidden` boolean
            - `size` ButtonWidgetPropsSize: Size properties for button
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
            - `text` ButtonWidgetPropsButtonTextProperties: Text properties for BUTTON widget
              - …
          - `tablet` ButtonWidgetPropsBreakpointProps: Responsive style overrides for BUTTON widget
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `flex` string
            - `hidden` boolean
            - `size` ButtonWidgetPropsSize: Size properties for button
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
            - `text` ButtonWidgetPropsButtonTextProperties: Text properties for BUTTON widget
              - …
        - `button_style` 'PRIMARY' | 'SECONDARY'
        - `flex` string
        - `hover` ButtonWidgetPropsButtonHoverProperties: Hover properties for BUTTON widget
          - `background` ButtonWidgetPropsButtonBackgroundHover: Button background hover for BUTTON widget
            - `color` string
          - `border` ButtonWidgetPropsButtonBorderHover: Button border hover for BUTTON widget
            - `color` string
          - `icon` ButtonWidgetPropsButtonIconHoverProperties: Icon hover properties for BUTTON widget
            - `color` string
          - `text` ButtonWidgetPropsButtonTextHoverProperties: Text hover properties for BUTTON widget
            - `color` string
            - `font_style` string
            - `font_weight` string
            - `text_decoration` string
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `icon` ButtonWidgetPropsButtonIconProperties: Icon properties for BUTTON widget
          - `color` string
          - `position` 'left' | 'right'
          - `size` string
          - `spacing` string
          - `url` string
        - `size` ButtonWidgetPropsSize: Size properties for button
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_width` string
          - `width` string
        - `spacing` StylesSpacing: Spacing properties for elements
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
        - `text` ButtonWidgetPropsButtonTextProperties: Text properties for BUTTON widget
          - `color` string
          - `direction` 'ltr' | 'rtl'
          - `font_family` string
          - `font_size` string
          - `font_style` string
          - `font_weight` string
          - `text_align` 'left' | 'center' | 'right'
          - `text_decoration` string
  - object
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` ClickToCallWidgetProps
      - `data` ClickToCallWidgetPropsData: Data properties for CLICK_TO_CALL widget
        - `phone_number` string
        - `text` string
      - `style` ButtonWidgetPropsStyle: Style properties for BUTTON widget
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesBackground: Background properties for elements
          - `color` string
          - `gradient` string
          - `image` BackgroundImage
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
        - `border` ButtonWidgetPropsBorder: Border properties for BUTTON widget
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsButtonWidgetPropsBreakpointPropsButtonWidgetPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` ButtonWidgetPropsMobileBreakpointProps
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `flex` string
            - `hidden` boolean
            - `size` ButtonWidgetPropsSize: Size properties for button
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
            - `text` ButtonWidgetPropsButtonTextProperties: Text properties for BUTTON widget
              - …
          - `tablet` ButtonWidgetPropsBreakpointProps: Responsive style overrides for BUTTON widget
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `flex` string
            - `hidden` boolean
            - `size` ButtonWidgetPropsSize: Size properties for button
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
            - `text` ButtonWidgetPropsButtonTextProperties: Text properties for BUTTON widget
              - …
        - `button_style` 'PRIMARY' | 'SECONDARY'
        - `flex` string
        - `hover` ButtonWidgetPropsButtonHoverProperties: Hover properties for BUTTON widget
          - `background` ButtonWidgetPropsButtonBackgroundHover: Button background hover for BUTTON widget
            - `color` string
          - `border` ButtonWidgetPropsButtonBorderHover: Button border hover for BUTTON widget
            - `color` string
          - `icon` ButtonWidgetPropsButtonIconHoverProperties: Icon hover properties for BUTTON widget
            - `color` string
          - `text` ButtonWidgetPropsButtonTextHoverProperties: Text hover properties for BUTTON widget
            - `color` string
            - `font_style` string
            - `font_weight` string
            - `text_decoration` string
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `icon` ButtonWidgetPropsButtonIconProperties: Icon properties for BUTTON widget
          - `color` string
          - `position` 'left' | 'right'
          - `size` string
          - `spacing` string
          - `url` string
        - `size` ButtonWidgetPropsSize: Size properties for button
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_width` string
          - `width` string
        - `spacing` StylesSpacing: Spacing properties for elements
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
        - `text` ButtonWidgetPropsButtonTextProperties: Text properties for BUTTON widget
          - `color` string
          - `direction` 'ltr' | 'rtl'
          - `font_family` string
          - `font_size` string
          - `font_style` string
          - `font_weight` string
          - `text_align` 'left' | 'center' | 'right'
          - `text_decoration` string
  - object
    - `custom_class_names` string[]
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` EmailWidgetProps
      - `data` EmailWidgetPropsData: Data properties for EMAIL widget
        - `email` string
        - `text` string
      - `style` ButtonWidgetPropsStyle: Style properties for BUTTON widget
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesBackground: Background properties for elements
          - `color` string
          - `gradient` string
          - `image` BackgroundImage
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
        - `border` ButtonWidgetPropsBorder: Border properties for BUTTON widget
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
- … truncated; see the full OpenAPI document linked below

## Response `200`

OK

- union
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `connected_data` SectionElementBinding: Data bindings for SECTION element
      - `style` SectionElementBindingStyle: Data bindings for SECTION style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` SectionElementProps
      - `data` SectionElementPropsData: Data properties for SECTION element
      - `style` SectionElementPropsStyle: Style properties for SECTION element
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsSectionElementPropsBreakpointPropsSectionElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` SectionElementPropsMobileBreakpointProps
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSectionSize: Size properties for section element
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` SectionElementPropsBreakpointProps: Responsive style overrides for SECTION element
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `column_gap` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSectionSize: Size properties for section element
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSectionSize: Size properties for section element
          - `max_width` string
          - `min_height` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` HeaderElementProps
      - `data` HeaderElementPropsData: Data properties for HEADER element
      - `style` HeaderElementPropsStyle: Style properties for HEADER element
        - `background` StylesBackground: Background properties for elements
          - `color` string
          - `gradient` string
          - `image` BackgroundImage
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
        - `sticky` boolean
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` HamburgerMenuElementProps
      - `data` HamburgerMenuElementPropsData: Data properties for HAMBURGER_MENU element
      - `style` SectionParentStyle: Container-level style properties for section-parent containers
        - `background` StylesBackground: Background properties for elements
          - `color` string
          - `gradient` string
          - `image` BackgroundImage
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` FooterElementProps
      - `data` FooterElementPropsData: Data properties for FOOTER element
      - `style` SectionParentStyle: Container-level style properties for section-parent containers
        - `background` StylesBackground: Background properties for elements
          - `color` string
          - `gradient` string
          - `image` BackgroundImage
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `connected_data` ColumnElementBinding: Data bindings for COLUMN element
      - `style` ColumnElementBindingStyle: Data bindings for COLUMN style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` ColumnElementProps
      - `data` ColumnElementPropsData: Data properties for COLUMN element
      - `style` ColumnElementPropsStyle: Style properties for COLUMN element
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsColumnElementPropsBreakpointPropsColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` ColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` ColumnElementPropsBreakpointProps: Responsive style overrides for COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `connected_data` InnerColumnElementBinding: Data bindings for INNER_COLUMN element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` InnerColumnElementProps
      - `data` InnerColumnElementPropsData: Data properties for INNER_COLUMN element
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` AdvancedGridElementProps
      - `data` AdvancedGridElementPropsData: Data properties for ADVANCED_GRID element
      - `style` AdvancedGridElementPropsStyle: Style properties for ADVANCED_GRID element
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesBackground: Background properties for elements
          - `color` string
          - `gradient` string
          - `image` BackgroundImage
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsAdvancedGridElementPropsBreakpointPropsAdvancedGridElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` AdvancedGridElementPropsMobileBreakpointProps
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `flex_direction` 'row' | 'column'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` AdvancedGridElementPropsBreakpointProps: Responsive style overrides for ADVANCED_GRID element
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `flex_direction` 'row' | 'column'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `flex_direction` 'row' | 'column'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` AdvancedAccordionProps
      - `data` AdvancedAccordionPropsData: Data properties for ADVANCED_ACCORDION container
        - `expand_first_by_default` boolean
        - `expand_one_at_atime` boolean
      - `style` AdvancedAccordionPropsStyle: Style properties for ADVANCED_ACCORDION container
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsAdvancedContainerStyleBreakpointPropsAdvancedContainerStyleMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` AdvancedContainerStyleMobileBreakpointProps
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `hidden` boolean
            - `size` AdvancedContainerSize
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` AdvancedContainerStyleBreakpointProps: Responsive style overrides for advanced containers
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `hidden` boolean
            - `size` AdvancedContainerSize
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `frame` FrameStyles
          - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
          - `background` StylesContainerBackground: Container background properties
            - `color` string
            - `gradient` string
            - `image` ContainerImageBackground
              - …
            - `overlay` BackgroundOverlay
              - …
            - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
              - …
            - `video` VideoBackground
              - …
          - `border` StylesContainerBorder: Border properties for elements
            - `color` string
            - `radius` string
            - `width` string
          - `box_shadow` string
          - `direction` 'ltr' | 'rtl'
          - `size` AdvancedContainerSize
            - `min_height` string
            - `width` string
          - `spacing` StylesContainerSpacing: Container spacing properties
            - `margin_bottom` string
            - `margin_left` string
            - `margin_right` string
            - `margin_top` string
            - `padding_bottom` string
            - `padding_left` string
            - `padding_right` string
            - `padding_top` string
        - `header_styles` HeaderStyles
          - `border` Border
            - `color` string
            - `width` string
          - `color` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
        - `title` ItemTitleStyles
          - `color` string
          - `font_family` string
          - `font_size` string
          - `font_style` string
          - `font_weight` string
          - `tag` 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
          - `text_align` 'left' | 'center' | 'right'
          - `text_decoration` string
        - `toggle_icon` ToggleIcon
          - `color` string
          - `height` string
          - `width` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `connected_data` AdvancedAccordionItemBinding: Data bindings for ADVANCED_ACCORDION_ITEM element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` AdvancedAccordionItemProps: Advanced accordion item element properties
      - `data` AdvancedAccordionItemPropsData: Data properties for ADVANCED_ACCORDION_ITEM element
        - `title` string: Title for the accordion item
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` AdvancedTabsProps
      - `data` AdvancedTabsPropsData: Data properties for ADVANCED_TABS container
      - `style` AdvancedContainerStyle
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsAdvancedContainerStyleBreakpointPropsAdvancedContainerStyleMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` AdvancedContainerStyleMobileBreakpointProps
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `hidden` boolean
            - `size` AdvancedContainerSize
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` AdvancedContainerStyleBreakpointProps: Responsive style overrides for advanced containers
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `hidden` boolean
            - `size` AdvancedContainerSize
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `frame` FrameStyles
          - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
          - `background` StylesContainerBackground: Container background properties
            - `color` string
            - `gradient` string
            - `image` ContainerImageBackground
              - …
            - `overlay` BackgroundOverlay
              - …
            - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
              - …
            - `video` VideoBackground
              - …
          - `border` StylesContainerBorder: Border properties for elements
            - `color` string
            - `radius` string
            - `width` string
          - `box_shadow` string
          - `direction` 'ltr' | 'rtl'
          - `size` AdvancedContainerSize
            - `min_height` string
            - `width` string
          - `spacing` StylesContainerSpacing: Container spacing properties
            - `margin_bottom` string
            - `margin_left` string
            - `margin_right` string
            - `margin_top` string
            - `padding_bottom` string
            - `padding_left` string
            - `padding_right` string
            - `padding_top` string
        - `title` ItemTitleStyles
          - `color` string
          - `font_family` string
          - `font_size` string
          - `font_style` string
          - `font_weight` string
          - `tag` 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
          - `text_align` 'left' | 'center' | 'right'
          - `text_decoration` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `connected_data` AdvancedTabsItemBinding: Data bindings for ADVANCED_TABS_ITEM element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` AdvancedTabsItemProps
      - `data` AdvancedTabsItemPropsData: Data properties for ADVANCED_TABS_ITEM element
        - `title` string: Title for the tab item
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `connected_data` FormElementBinding: Data bindings for FORM_ELEMENT element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` FormElementProps
      - `data` FormElementPropsData: Data properties for FORM_ELEMENT props
        - `email_settings` FormElementPropsEmailSettings: Email configuration for form submissions
          - `auto_reply` FormElementPropsAutoReply: Auto-reply configuration for form submitters
            - `enabled` boolean: Enable automatic reply to form submitters
            - `include_form_copy` boolean: Include a copy of the submitted form data in the auto-reply
            - `message` string: Message body of the auto-reply email, as HTML.
            - `sender_name` string: Name displayed in the 'From' field of auto-reply emails
            - `subject` string: Subject line for auto-reply email
          - `recipient_settings` FormElementPropsRecipientSettings: Recipient configuration for form submission emails
            - `recipient_emails` string[]: List of recipient email addresses for form submissions (e.g., ['contact@example.com', 'admin@example.com'])
            - `sender_name` string: Name displayed in the 'From' field of submission emails
            - `subject` string: Email subject line for form submissions
            - `use_content_library_email` boolean: Use content library primary email as fallback when recipient list is empty
        - `form_id` string: Unique identifier for the form, generated at creation (e.g., 'advanced_form_7496c9fd'). Read-only — do not send it on insert or update.
        - `title` string: Form title for reporting and internal identification (e.g., 'Contact Us Form')
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `connected_data` FormButtonsContainerElementBinding: Data bindings for FORM_BUTTONS_CONTAINER element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` FormButtonsContainerElementProps
      - `data` FormButtonsContainerElementPropsData: Data properties for FORM_BUTTONS_CONTAINER props
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `children` BaseElementSchema[]
    - `connected_data` FormStepElementBinding: Data bindings for FORM_STEP element
      - `style` CommonInnerColumnStyleBinding: Data bindings for inner-column style props
        - `background` ContainerBackgroundBinding: Data bindings for a container background
          - `image` ImageBinding: Binds an image prop to a dynamic data field
            - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
            - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
          - `slideshow` ContainerBackgroundBindingSlideshow: Data bindings for a container background slideshow
            - `slides` ListBindingContainerBackgroundBindingSlide: Binds a list-valued prop to a collection and maps row fields onto its items
              - …
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` FormStepElementProps
      - `data` FormStepElementPropsData: Data properties for FORM_STEP props
        - `step_type` 'REGULAR' | 'SUCCESS' | 'ERROR': Form step type for FORM_STEP elements
      - `style` CommonInnerColumnStyleProps
        - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesContainerBackground: Container background properties
          - `color` string
          - `gradient` string
          - `image` ContainerImageBackground
            - `attachment` 'DEFAULT' | 'FIXED' | 'PARALLAX': Scroll behaviour of a container background image
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
          - `overlay` BackgroundOverlay
            - `color` string
            - `opacity` number, double
          - `slideshow` StylesBackgroundSlideshow: Background slideshow properties for container elements
            - `slides` string[], required: List of image URLs for the slideshow. At least 2 images are required for the slideshow to activate.
            - `speed` integer: Interval between slides in seconds (2-20)
            - `transition` 'fade' | 'slideLeft' | 'slideRight' | 'slideTop' | 'slideBottom': Transition effect for background slideshow
          - `video` VideoBackground
            - `disable_loop` boolean
            - `enabled_on_mobile` boolean
            - `thumbnail` string
            - `url` string
        - `border` StylesContainerBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsInnerColumnElementPropsBreakpointPropsInnerColumnElementPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` InnerColumnElementPropsMobileBreakpointProps
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
          - `tablet` InnerColumnElementPropsBreakpointProps: Responsive style overrides for INNER_COLUMN element
            - `align_content` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `align_items` 'flex-start' | 'center' | 'flex-end' | 'stretch'
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `column_gap` string
            - `flex` string
            - `flex_direction` 'row' | 'column'
            - `flex_wrap` 'nowrap' | 'wrap'
            - `hidden` boolean
            - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
            - `row_gap` string
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesContainerSpacing: Container spacing properties
              - …
        - `column_gap` string
        - `flex` string
        - `flex_direction` 'row' | 'column'
        - `flex_wrap` 'nowrap' | 'wrap'
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `justify_content` 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'
        - `row_gap` string
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesContainerSpacing: Container spacing properties
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `connected_data` ImageWidgetBinding: Data bindings for IMAGE widget
      - `data` ImageWidgetBindingData: Data bindings for IMAGE widget data props
        - `alt` TextBinding: Binds a text prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the text value comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
        - `link` LinkBinding: Binds a link prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the link value comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
        - `src` ImageBinding: Binds an image prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the image comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` ImageWidgetProps
      - `data` ImageWidgetPropsData: Data properties for IMAGE widget
        - `alt` string
        - `image_dimensions` ImageWidgetPropsImageDimensions: Intrinsic pixel size of the image file at src (the browser naturalWidth x naturalHeight), stored as the img width/height attributes. This is not the rendered size of the element; set that with style.size.
          - `height` integer, required: Height of the image file in pixels
          - `width` integer, required: Width of the image file in pixels
        - `link` ButtonWidgetPropsLink: Link properties for BUTTON widget
          - `href` string
          - `rel` string
          - `target` string
          - `type` string
        - `src` string
      - `style` ImageWidgetPropsStyle: Style properties for IMAGE widget
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `border` ImageWidgetPropsBorder: Border properties for IMAGE widget
          - `color` string
          - `radius` string
          - `width` string
        - `box_shadow` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsStylesCommonBreakpointPropsStylesCommonMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` StylesCommonMobileBreakpointProps
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `flex` string
            - `hidden` boolean
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
          - `tablet` StylesCommonBreakpointProps: Common responsive style overrides (alignment, size, spacing)
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `flex` string
            - `hidden` boolean
            - `size` StylesSize: Size properties for elements
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
        - `flex` string
        - `hover` ImageWidgetPropsHover: Hover properties for IMAGE widget
          - `effect` 'NONE' | 'ZOOM_OUT' | 'OPACITY' | 'FLOAT' | 'FORWARD' | 'GRAYSCALE' | 'REVERSE_GRAYSCALE' | 'BLUR' | 'GRAYSCALE_BLUR': Hover effect options for widgets
        - `object_fit` 'none' | 'cover' | 'contain'
        - `object_position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesSpacing: Spacing properties for elements
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
  - object
    - `anchor_id` string
    - `connected_data` ParagraphWidgetBinding: Data bindings for PARAGRAPH widget
      - `data` ParagraphWidgetBindingData: Data bindings for PARAGRAPH widget data props
        - `content` TextBinding: Binds a text prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the text value comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` ParagraphWidgetProps
      - `data` ParagraphWidgetPropsData: Data properties for PARAGRAPH widget
        - `content` string
      - `style` ParagraphWidgetPropsStyle: Style properties for PARAGRAPH widget
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `background` StylesBackground: Background properties for elements
          - `color` string
          - `gradient` string
          - `image` BackgroundImage
            - `display_mode` 'COVER' | 'CONTAIN' | 'TILE' | 'NO_REPEAT'
            - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
            - `url` string
        - `border` StylesBorder: Border properties for elements
          - `color` string
          - `radius` string
          - `width` string
        - `breakpoint_overrides` BreakpointOverridesStylesBaseBreakpointPropsParagraphWidgetPropsBreakpointPropsParagraphWidgetPropsMobileBreakpointProps
          - `desktop` StylesBaseBreakpointProps: Base for breakpoint-override slots; carries per-breakpoint visibility. hidden: true = hidden on this breakpoint; false or absent = visible.
            - `hidden` boolean
          - `mobile` ParagraphWidgetPropsMobileBreakpointProps
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `flex` string
            - `hidden` boolean
            - `size` ParagraphWidgetPropsSize: Size properties for PARAGRAPH widget
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
            - `text` ParagraphWidgetPropsText: Typography for a paragraph bound to connected data. Accepted and returned only when connected_data.data.content is set; unbound text is styled inline in data.content.
              - …
          - `tablet` ParagraphWidgetPropsBreakpointProps: Responsive style overrides for PARAGRAPH widget
            - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
            - `flex` string
            - `hidden` boolean
            - `size` ParagraphWidgetPropsSize: Size properties for PARAGRAPH widget
              - …
            - `spacing` StylesSpacing: Spacing properties for elements
              - …
            - `text` ParagraphWidgetPropsText: Typography for a paragraph bound to connected data. Accepted and returned only when connected_data.data.content is set; unbound text is styled inline in data.content.
              - …
        - `flex` string
        - `hover_effect` 'zoomout' | 'shrink' | 'move-top' | 'move-bottom' | 'move-left' | 'move-right' | 'rotate' | 'opacity' | 'grayscale' | 'shadow': Hover effect the element performs on pointer hover (desktop and tablet - hover has no per-breakpoint overrides). Null when no effect is set; omit or send null to clear.
        - `size` ParagraphWidgetPropsSize: Size properties for PARAGRAPH widget
          - `max_width` string
          - `min_width` string
          - `width` string
        - `spacing` StylesSpacing: Spacing properties for elements
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
        - `text` ParagraphWidgetPropsText: Typography for a paragraph bound to connected data. Accepted and returned only when connected_data.data.content is set; unbound text is styled inline in data.content.
          - `color` string
          - `direction` 'ltr' | 'rtl'
          - `font_family` string
          - `font_size` string
          - `font_style` string
          - `font_weight` string
          - `text_align` 'left' | 'center' | 'right' | 'justify'
          - `text_decoration` string
  - object
    - `anchor_id` string
    - `connected_data` PhotoGalleryWidgetBinding: Data bindings for PHOTO_GALLERY widget
      - `data` PhotoGalleryWidgetBindingData: Data bindings for PHOTO_GALLERY widget data props
        - `images` ListBindingPhotoGalleryWidgetBindingImageInfo: Binds a list-valued prop to a collection and maps row fields onto its items
          - `collection` string: Site collection name; required when source is COLLECTION. The ordinary case — use this on any page not itself bound to a collection row
          - `field` string: Collection-typed field of the current row of the page's dynamic collection — an inner collection; required when source is DYNAMIC_PAGE
          - `item` PhotoGalleryWidgetBindingImageInfo: Per-item field bindings for PHOTO_GALLERY images
            - `alt` TextBinding: Binds a text prop to a dynamic data field
              - …
            - `button` PhotoGalleryWidgetBindingButton: Bindings for PHOTO_GALLERY item button
              - …
            - `description` PhotoGalleryWidgetBindingDescription: Bindings for PHOTO_GALLERY item description
              - …
            - `src` ImageBinding: Binds an image prop to a dynamic data field
              - …
            - `title` PhotoGalleryWidgetBindingTitle: Bindings for PHOTO_GALLERY item title
              - …
          - `query` CollectionQuery: Filter, sort and limit applied when populating a list from a collection
            - `filters` CollectionQueryFilter[]
              - …
            - `limit` integer: Maximum number of items to populate
            - `sort` CollectionQuerySort[]
              - …
          - `source` 'COLLECTION' | 'DYNAMIC_PAGE', required: Where the list items come from
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` PhotoGalleryWidgetProps
      - `data` PhotoGalleryWidgetPropsData: Data properties for PHOTO_GALLERY widget
        - `images` PhotoGalleryWidgetPropsImageInfo[]
          - `alt` string
          - `button` PhotoGalleryWidgetPropsButtonConfig: Button configuration for PHOTO_GALLERY widget
            - `link` ButtonWidgetPropsLink: Link properties for BUTTON widget
              - …
            - `show_button` boolean
            - `text` string
          - `description` PhotoGalleryWidgetPropsDescriptionConfig: Description configuration for PHOTO_GALLERY widget
            - `description` string
            - `show_description` boolean
          - `src` string
          - `title` PhotoGalleryWidgetPropsTitleConfig: Title configuration for PHOTO_GALLERY widget
            - `show_title` boolean
            - `title` string
      - `style` PhotoGalleryWidgetPropsStyle: Style properties for PHOTO_GALLERY widget
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
        - `auto_adjust_columns` boolean
        - `breakpoint_overrides` BreakpointOverridesPhotoGalleryStylesBreakpointPropsPhotoGalleryStylesBreakpointPropsPhotoGalleryStylesMobileBreakpointProps
          - `desktop` PhotoGalleryStylesBreakpointProps: Photo gallery responsive style overrides
            - `caption` PhotoGalleryWidgetPropsCaptionBreakpointProps: Caption breakpoint properties for PHOTO_GALLERY widget
              - …
            - `flex` string
            - `hidden` boolean
            - `image_style` PhotoGalleryStylesBreakpointImageStyle: Photo gallery responsive image style overrides
              - …
          - `mobile` PhotoGalleryStylesMobileBreakpointProps
            - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
              - …
            - `caption` PhotoGalleryWidgetPropsCaptionBreakpointProps: Caption breakpoint properties for PHOTO_GALLERY widget
              - …
            - `flex` string
            - `hidden` boolean
            - `image_style` PhotoGalleryStylesBreakpointImageStyle: Photo gallery responsive image style overrides
              - …
          - `tablet` PhotoGalleryStylesBreakpointProps: Photo gallery responsive style overrides
            - `caption` PhotoGalleryWidgetPropsCaptionBreakpointProps: Caption breakpoint properties for PHOTO_GALLERY widget
              - …
            - `flex` string
            - `hidden` boolean
            - `image_style` PhotoGalleryStylesBreakpointImageStyle: Photo gallery responsive image style overrides
              - …
        - `caption` PhotoGalleryWidgetPropsCaption: Caption properties for PHOTO_GALLERY widget
          - `border` PhotoGalleryWidgetPropsCaptionBorder: Border properties for PHOTO_GALLERY widget caption
            - `color` string
            - `width` string
          - `description` PhotoGalleryTextProperties: Text properties for photo gallery
            - `color` string
            - `direction` 'ltr' | 'rtl'
            - `font_family` string
            - `font_style` string
            - `font_weight` string
            - `text_decoration` string
          - `display` 'BELOW' | 'OVER' | 'ON_HOVER'
          - `hover` PhotoGalleryWidgetPropsCaptionHover: Hover properties for PHOTO_GALLERY widget caption
            - `background` PhotoGalleryWidgetPropsCaptionBackground: Background properties for PHOTO_GALLERY widget caption
              - …
          - `padding` string
          - `position` 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right'
          - `title` PhotoGalleryTextProperties: Text properties for photo gallery
            - `color` string
            - `direction` 'ltr' | 'rtl'
            - `font_family` string
            - `font_style` string
            - `font_weight` string
            - `text_decoration` string
        - `columns` integer
        - `corner_radius` string
        - `flex` string
        - `hover` PhotoGalleryWidgetPropsHover: Hover properties for PHOTO_GALLERY widget
          - `image` PhotoGalleryWidgetPropsImageHover: Image hover properties for PHOTO_GALLERY widget
            - `effect` 'NONE' | 'ZOOM_OUT' | 'GRAYSCALE' | 'REVERSE_GRAYSCALE' | 'BLUR' | 'GRAYSCALE_BLUR' | 'OPACITY' | 'SHINE'
        - `image` PhotoGalleryWidgetPropsImageStyles: Image styles for PHOTO_GALLERY widget
          - `animation` 'NONE' | 'BOUNCE' | 'FLASH' | 'PULSE' | 'RUBBER_BAND' | 'SHAKE' | 'SWING' | 'TADA' | 'WOBBLE' | 'BOUNCE_IN' | 'BOUNCE_IN_LEFT' | 'BOUNCE_IN_RIGHT' | 'FADE_IN' | 'FADE_IN_LEFT' | 'FADE_IN_RIGHT' | 'FADE_IN_UP' | 'FLIP_IN_X' | 'FLIP_IN_Y' | 'ROTATE_IN' | 'ROTATE_IN_DOWN_LEFT' | 'ROTATE_IN_DOWN_RIGHT' | 'ROTATE_IN_UP_LEFT' | 'ROTATE_IN_UP_RIGHT' | 'ROLL_IN' | 'ZOOM_IN' | 'ZOOM_IN_UP' | 'SLIDE_IN_DOWN' | 'SLIDE_IN_LEFT' | 'SLIDE_IN_RIGHT': Animation options shared across widgets
          - `size` 'cover' | 'contain'
        - `layout` 'SQUARE' | 'CLASSIC_ROUNDED' | 'CLASSIC_DROPS' | 'VERTICAL' | 'VERTICAL_ROUNDED' | 'PANORAMIC' | 'ASYMMETRIC_2' | 'ASYMMETRIC_3' | 'PINTEREST' | 'PINTEREST_ROUNDED'
        - `size` StylesSize: Size properties for elements
          - `height` string
          - `max_height` string
          - `max_width` string
          - `min_height` string
          - `min_width` string
          - `width` string
        - `spacing` StylesSpacing: Spacing properties for elements
          - `margin_bottom` string
          - `margin_left` string
          - `margin_right` string
          - `margin_top` string
          - `padding_bottom` string
          - `padding_left` string
          - `padding_right` string
          - `padding_top` string
        - `visible_rows` integer
  - object
    - `anchor_id` string
    - `connected_data` ButtonWidgetBinding: Data bindings for BUTTON widget
      - `data` ButtonWidgetBindingData: Data bindings for BUTTON widget data props
        - `link` LinkBinding: Binds a link prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the link value comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
        - `text` TextBinding: Binds a text prop to a dynamic data field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES': Where the text value comes from; optional inside a list item mapping, where it defaults to COLLECTION_ITEM — required everywhere else
    - `custom_class_names` string[]
    - `element_id` string
    - `element_source_id` string
    - `element_type` 'UNKNOWN' | 'SECTION' | 'HEADER' | 'HAMBURGER_MENU' | 'FOOTER' | 'COLUMN' | 'INNER_COLUMN' | 'ADVANCED_GRID' | 'ADVANCED_ACCORDION' | 'ADVANCED_ACCORDION_ITEM' | 'ADVANCED_TABS' | 'ADVANCED_TABS_ITEM' | 'FORM_ELEMENT' | 'FORM_BUTTONS_CONTAINER' | 'FORM_STEP' | 'IMAGE' | 'PARAGRAPH' | 'PHOTO_GALLERY' | 'BUTTON' | 'CLICK_TO_CALL' | 'EMAIL' | 'VIDEO' | 'DIVIDER' | 'SHAPE' | 'ACCORDION' | 'NAVIGATION' | 'ICON' | 'MAP' | 'MEDIA_SLIDER' | 'SOCIAL_ICONS' | 'SPACER' | 'FORM_BUTTON' | 'TEXT_INPUT' | 'CHOICE' | 'DATE_INPUT' | 'DROPDOWN' | 'FILE_UPLOAD' | 'CART' | 'OPT_IN' | 'TABLE' | 'CUSTOM_WIDGET' | 'HAMBURGER_BUTTON' | 'HTML' | 'PRODUCT_PRICE' | 'PRODUCT_PRICE_OPTIONS' | 'ADD_TO_CART' | 'OPTIONS_VARIATIONS', required
    - `name` string
    - `next_sibling_id` string
    - `parent_id` string
    - `props` ButtonWidgetProps
      - `data` ButtonWidgetPropsData: Data properties for BUTTON widget
        - `link` ButtonWidgetPropsLink: Link properties for BUTTON widget
          - `href` string
          - `rel` string
          - `target` string
          - `type` string
        - `text` string
      - `style` ButtonWidgetPropsStyle: Style properties for BUTTON widget
        - `alignment` 'LEFT' | 'CENTER' | 'RIGHT' | 'STRETCH'
        - `animation` Animation: Animation for one breakpoint. Fields valid for each trigger differ: entrance uses duration_ms/delay_ms; viewport uses reverse/viewport_thresholds. Use type 'none' to clear this breakpoint's animation.
          - `delay_ms` integer: Delay in milliseconds (0-10000). entrance trigger only.
          - `direction` 'in-place' | 'right' | 'left' | 'up' | 'down' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft' | 'X' | 'Y': Direction/axis for the preset. Allowed values depend on type.
          - `duration_ms` integer: Duration in milliseconds (50-10000). entrance trigger only.
          - `intensity` integer: Intensity 1-100.
          - `reverse` boolean: Play in reverse when scrolling away. viewport trigger only.
          - `trigger` 'entrance' | 'viewport': When the animation runs. 'entrance': plays once when the element first appears - on load, or the first time it scrolls into view - timed by duration_ms/delay_ms. 'viewport': scroll-linked - driven by the element's position as the page scrolls, and can play in reverse as it scrolls back out (reverse), with viewport_thresholds setting how far into the viewport it triggers.
          - `type` 'none' | 'fadeInCombo' | 'slideInCombo' | 'bounceInCombo' | 'rotateInCombo' | 'rollInCombo' | 'zoomInCombo' | 'flipInCombo' | 'flash' | 'pulse' | 'rubberBand' | 'shake' | 'swing' | 'tada' | 'wobble': The animation effect the element performs - its visual motion (e.g. slide-in, fade-in, zoom-in, flip, pulse, shake). Directional effects pair with 'direction'; the rest play in place. Use 'none' to clear this breakpoint's animation.
          - `viewport_thresholds` AnimationViewportThresholds: Viewport thresholds (0-100). viewport trigger only.
            - `bottom` integer
            - `top` integer
- … truncated; see the full OpenAPI document linked below

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `402`: Payment Required
- `405`: Method Not Allowed
- `429`: Too many requests. The rate limit was exceeded.
- `500`: Internal Server Error

---

[API](https://skmtc.dev/duda/apis/duda-partner-api.md) - [All operations](https://skmtc.dev/duda/apis/duda-partner-api/llms.txt) - [OpenAPI document](https://skmtc.dev/duda/apis/duda-partner-api/revisions/52be4d41cb12?raw)
