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

# Update a theme



## OpenAPI

````yaml /api-reference-v2/openapi.json patch /v2/projects/{projectId}/themes/{id}
openapi: 3.0.0
info:
  title: Usertour API v2
  description: >-
    Project-scoped v2 API. Authenticate with a personal API token — an opaque
    `utp_...` string (NOT a JWT: do not try to decode it), created in the
    Usertour app under Settings → API, sent as `Authorization: Bearer utp_...`.
  version: '2.0'
  contact: {}
servers:
  - url: https://api.usertour.io
security: []
tags: []
paths:
  /v2/projects/{projectId}/themes/{id}:
    patch:
      tags:
        - Themes
      summary: Update a theme
      operationId: ApiThemesController_update
      parameters:
        - name: projectId
          required: true
          in: path
          description: Project ID
          schema:
            type: string
        - name: id
          required: true
          in: path
          description: Theme ID
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateThemeBodyDto'
      responses:
        '200':
          description: Theme updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThemeDto'
        '400':
          description: >-
            Invalid request — E1017 validation (may carry `issues`; an invalid
            orderBy/limit is also E1017), E1015 invalid scope, E0003 invalid
            against current domain state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
        '401':
          description: Missing or expired API key — E1010, E1020.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
        '403':
          description: >-
            Refused — E1000 invalid key, E1011 project not in token scope, E1012
            insufficient scope; E1038 custom CSS requires the Growth plan or
            above — introducing or changing a non-empty `customCss` is refused
            below that plan (echoing the stored value back, or clearing it,
            always passes).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
        '404':
          description: Theme not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
        '409':
          description: >-
            System themes cannot be modified (E1035) — duplicate one into your
            own theme; isDefault: true alone is allowed (it only moves the
            project default pointer).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
        '429':
          description: >-
            Rate limit exceeded — E1013. The limit follows the project's plan
            (100/500/1000/3000 requests per minute); unknown credentials share a
            per-IP bucket. Every response also carries X-RateLimit-Limit /
            -Remaining / -Reset for pacing; a 429 adds the standard Retry-After
            header (seconds to back off).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
      security:
        - bearer: []
components:
  schemas:
    UpdateThemeBodyDto:
      type: object
      properties:
        name:
          type: string
          minLength: 1
        isDefault:
          description: >-
            Set `true` to make this the project default theme (the previous
            default is cleared). `false` on the current default is rejected —
            default another theme instead; a project always keeps a default.
          type: boolean
        settings:
          description: >-
            Partial theme styling merged onto the theme's current settings
            (colors, fonts, sizes, …). Send only the fields you change; omitted
            fields are kept. This is pure INTENT: Auto-capable color fields take
            a hex or the literal "Auto" (derived at render); read what "Auto"
            resolves to with expand: ["resolvedSettings"].
          type: object
          properties:
            announcement:
              type: object
              properties:
                bubbleWidth:
                  type: number
                  minimum: 100
                  maximum: 1000
                  nullable: true
                modalWidth:
                  type: number
                  minimum: 100
                  maximum: 1000
                  nullable: true
              additionalProperties: false
              nullable: true
            avatar:
              type: object
              properties:
                size:
                  type: number
                  minimum: 10
                  maximum: 200
                  nullable: true
                type:
                  type: string
                  enum:
                    - cartoon
                    - upload
                    - url
                    - none
                    - null
                  description: >-
                    Read-only through the API: echo it back unchanged or omit it
                    — a changed value is rejected.
                  nullable: true
                url:
                  type: string
                  description: >-
                    Read-only through the API: echo it back unchanged or omit it
                    — a changed value is rejected.
                  nullable: true
                name:
                  type: string
                  description: >-
                    Read-only through the API: echo it back unchanged or omit it
                    — a changed value is rejected.
                  nullable: true
              additionalProperties: false
              nullable: true
            backdrop:
              type: object
              properties:
                color:
                  type: string
                  pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                  nullable: true
                highlight:
                  type: object
                  properties:
                    color:
                      type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                      nullable: true
                    opacity:
                      description: Percent, 0-100 (not 0-1).
                      type: number
                      minimum: 0
                      maximum: 100
                      nullable: true
                    radius:
                      type: number
                      minimum: 0
                      maximum: 100
                      nullable: true
                    spread:
                      type: number
                      minimum: 0
                      maximum: 100
                      nullable: true
                    type:
                      type: string
                      enum:
                        - outside
                        - inside
                        - null
                      nullable: true
                  additionalProperties: false
                  nullable: true
                opacity:
                  description: Percent, 0-100 (not 0-1).
                  type: number
                  minimum: 0
                  maximum: 100
                  nullable: true
              additionalProperties: false
              nullable: true
            banner:
              type: object
              properties:
                animationDuration:
                  description: Milliseconds.
                  type: number
                  minimum: 0
                  maximum: 10000
                  nullable: true
                animationTiming:
                  type: string
                  enum:
                    - smooth
                    - snappy
                    - gentle
                    - linear
                    - null
                  nullable: true
                backgroundColor:
                  type: object
                  properties:
                    background:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                  additionalProperties: false
                  nullable: true
                padding:
                  type: number
                  minimum: 0
                  maximum: 100
                  nullable: true
                textColor:
                  type: object
                  properties:
                    color:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                  additionalProperties: false
                  nullable: true
              additionalProperties: false
              nullable: true
            border:
              type: object
              properties:
                borderColor:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
                borderRadius:
                  type: number
                  minimum: 0
                  nullable: true
                borderWidth:
                  type: number
                  minimum: 0
                  maximum: 50
                  nullable: true
                borderWidthEnabled:
                  type: boolean
                  nullable: true
              additionalProperties: false
              nullable: true
            brandColor:
              type: object
              properties:
                active:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
                background:
                  type: string
                  pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                  nullable: true
                color:
                  type: string
                  pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                  nullable: true
                hover:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
              additionalProperties: false
              nullable: true
            bubble:
              type: object
              properties:
                placement:
                  type: object
                  properties:
                    position:
                      type: string
                      enum:
                        - leftTop
                        - centerTop
                        - rightTop
                        - leftBottom
                        - centerBottom
                        - rightBottom
                        - center
                        - null
                      nullable: true
                    positionOffsetX:
                      type: number
                      minimum: -1000
                      maximum: 1000
                      nullable: true
                    positionOffsetY:
                      type: number
                      minimum: -1000
                      maximum: 1000
                      nullable: true
                  additionalProperties: false
                  nullable: true
                width:
                  type: number
                  minimum: 100
                  maximum: 1000
                  nullable: true
              additionalProperties: false
              nullable: true
            buttons:
              type: object
              properties:
                borderRadius:
                  type: number
                  minimum: 0
                  maximum: 100
                  nullable: true
                height:
                  type: number
                  minimum: 1
                  maximum: 100
                  nullable: true
                minWidth:
                  type: number
                  minimum: 0
                  maximum: 500
                  nullable: true
                primary:
                  type: object
                  properties:
                    backgroundColor:
                      type: object
                      properties:
                        active:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        background:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        hover:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                      additionalProperties: false
                      nullable: true
                    border:
                      type: object
                      properties:
                        borderWidth:
                          type: number
                          minimum: 0
                          maximum: 20
                          nullable: true
                        color:
                          type: object
                          properties:
                            active:
                              anyOf:
                                - type: string
                                  pattern: >-
                                    ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                - type: string
                                  enum:
                                    - Auto
                              description: >-
                                A hex color (e.g. "#2563eb"), or the literal
                                "Auto" to derive the value from the theme's base
                                colors. Reads return the stored intent — "Auto"
                                comes back as "Auto", not resolved.
                              nullable: true
                            color:
                              anyOf:
                                - type: string
                                  pattern: >-
                                    ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                - type: string
                                  enum:
                                    - Auto
                              description: >-
                                A hex color (e.g. "#2563eb"), or the literal
                                "Auto" to derive the value from the theme's base
                                colors. Reads return the stored intent — "Auto"
                                comes back as "Auto", not resolved.
                              nullable: true
                            hover:
                              anyOf:
                                - type: string
                                  pattern: >-
                                    ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                - type: string
                                  enum:
                                    - Auto
                              description: >-
                                A hex color (e.g. "#2563eb"), or the literal
                                "Auto" to derive the value from the theme's base
                                colors. Reads return the stored intent — "Auto"
                                comes back as "Auto", not resolved.
                              nullable: true
                          additionalProperties: false
                          nullable: true
                        enabled:
                          type: boolean
                          nullable: true
                      additionalProperties: false
                      nullable: true
                    fontWeight:
                      anyOf:
                        - type: number
                          enum:
                            - 100
                        - type: number
                          enum:
                            - 200
                        - type: number
                          enum:
                            - 300
                        - type: number
                          enum:
                            - 400
                        - type: number
                          enum:
                            - 500
                        - type: number
                          enum:
                            - 600
                        - type: number
                          enum:
                            - 700
                        - type: number
                          enum:
                            - 800
                        - type: number
                          enum:
                            - 900
                      nullable: true
                    textColor:
                      type: object
                      properties:
                        active:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        color:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        hover:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                      additionalProperties: false
                      nullable: true
                  additionalProperties: false
                  nullable: true
                px:
                  type: number
                  minimum: 0
                  maximum: 100
                  nullable: true
                secondary:
                  type: object
                  properties:
                    backgroundColor:
                      type: object
                      properties:
                        active:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        background:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        hover:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                      additionalProperties: false
                      nullable: true
                    border:
                      type: object
                      properties:
                        borderWidth:
                          type: number
                          minimum: 0
                          maximum: 20
                          nullable: true
                        color:
                          type: object
                          properties:
                            active:
                              anyOf:
                                - type: string
                                  pattern: >-
                                    ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                - type: string
                                  enum:
                                    - Auto
                              description: >-
                                A hex color (e.g. "#2563eb"), or the literal
                                "Auto" to derive the value from the theme's base
                                colors. Reads return the stored intent — "Auto"
                                comes back as "Auto", not resolved.
                              nullable: true
                            color:
                              anyOf:
                                - type: string
                                  pattern: >-
                                    ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                - type: string
                                  enum:
                                    - Auto
                              description: >-
                                A hex color (e.g. "#2563eb"), or the literal
                                "Auto" to derive the value from the theme's base
                                colors. Reads return the stored intent — "Auto"
                                comes back as "Auto", not resolved.
                              nullable: true
                            hover:
                              anyOf:
                                - type: string
                                  pattern: >-
                                    ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                - type: string
                                  enum:
                                    - Auto
                              description: >-
                                A hex color (e.g. "#2563eb"), or the literal
                                "Auto" to derive the value from the theme's base
                                colors. Reads return the stored intent — "Auto"
                                comes back as "Auto", not resolved.
                              nullable: true
                          additionalProperties: false
                          nullable: true
                        enabled:
                          type: boolean
                          nullable: true
                      additionalProperties: false
                      nullable: true
                    fontWeight:
                      anyOf:
                        - type: number
                          enum:
                            - 100
                        - type: number
                          enum:
                            - 200
                        - type: number
                          enum:
                            - 300
                        - type: number
                          enum:
                            - 400
                        - type: number
                          enum:
                            - 500
                        - type: number
                          enum:
                            - 600
                        - type: number
                          enum:
                            - 700
                        - type: number
                          enum:
                            - 800
                        - type: number
                          enum:
                            - 900
                      nullable: true
                    textColor:
                      type: object
                      properties:
                        active:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        color:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        hover:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                      additionalProperties: false
                      nullable: true
                  additionalProperties: false
                  nullable: true
              additionalProperties: false
              nullable: true
            checklist:
              type: object
              properties:
                checkmarkColor:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
                completedTaskTextDecoration:
                  type: string
                  enum:
                    - none
                    - line-through
                    - null
                  nullable: true
                placement:
                  type: object
                  properties:
                    position:
                      type: string
                      enum:
                        - leftTop
                        - rightTop
                        - leftBottom
                        - rightBottom
                        - center
                        - null
                      nullable: true
                    positionOffsetX:
                      type: number
                      minimum: 0
                      maximum: 1000
                      nullable: true
                    positionOffsetY:
                      type: number
                      minimum: 0
                      maximum: 1000
                      nullable: true
                  additionalProperties: false
                  nullable: true
                width:
                  type: number
                  minimum: 100
                  maximum: 1000
                  nullable: true
                zIndex:
                  type: number
                  nullable: true
              additionalProperties: false
              nullable: true
            checklistLauncher:
              type: object
              properties:
                borderRadius:
                  type: number
                  minimum: 0
                  maximum: 100
                  nullable: true
                color:
                  type: object
                  properties:
                    active:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    background:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    color:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    hover:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                  additionalProperties: false
                  nullable: true
                counter:
                  type: object
                  properties:
                    background:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    color:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                  additionalProperties: false
                  nullable: true
                fontWeight:
                  anyOf:
                    - type: number
                      enum:
                        - 100
                    - type: number
                      enum:
                        - 200
                    - type: number
                      enum:
                        - 300
                    - type: number
                      enum:
                        - 400
                    - type: number
                      enum:
                        - 500
                    - type: number
                      enum:
                        - 600
                    - type: number
                      enum:
                        - 700
                    - type: number
                      enum:
                        - 800
                    - type: number
                      enum:
                        - 900
                  nullable: true
                height:
                  type: number
                  minimum: 10
                  maximum: 200
                  nullable: true
                placement:
                  type: object
                  properties:
                    position:
                      type: string
                      enum:
                        - leftTop
                        - rightTop
                        - leftBottom
                        - rightBottom
                        - center
                        - null
                      nullable: true
                    positionOffsetX:
                      type: number
                      minimum: 0
                      maximum: 1000
                      nullable: true
                    positionOffsetY:
                      type: number
                      minimum: 0
                      maximum: 1000
                      nullable: true
                  additionalProperties: false
                  nullable: true
              additionalProperties: false
              nullable: true
            customCss:
              type: string
              nullable: true
            focusHighlight:
              type: object
              properties:
                color:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
                opacity:
                  description: Percent, 0-100 (not 0-1).
                  type: number
                  minimum: 0
                  maximum: 100
                  nullable: true
              additionalProperties: false
              nullable: true
            font:
              type: object
              properties:
                customFontFamily:
                  type: string
                  description: >-
                    Font family name used when font.fontFamily is "Custom font"
                    (declare the face itself via customCss @font-face). When set
                    this way it OVERRIDES font.fontFamily at render.
                  nullable: true
                fontFamily:
                  type: string
                  nullable: true
                fontSize:
                  type: number
                  minimum: 10
                  maximum: 50
                  nullable: true
                fontWeightBold:
                  anyOf:
                    - type: number
                      enum:
                        - 100
                    - type: number
                      enum:
                        - 200
                    - type: number
                      enum:
                        - 300
                    - type: number
                      enum:
                        - 400
                    - type: number
                      enum:
                        - 500
                    - type: number
                      enum:
                        - 600
                    - type: number
                      enum:
                        - 700
                    - type: number
                      enum:
                        - 800
                    - type: number
                      enum:
                        - 900
                  nullable: true
                fontWeightNormal:
                  anyOf:
                    - type: number
                      enum:
                        - 100
                    - type: number
                      enum:
                        - 200
                    - type: number
                      enum:
                        - 300
                    - type: number
                      enum:
                        - 400
                    - type: number
                      enum:
                        - 500
                    - type: number
                      enum:
                        - 600
                    - type: number
                      enum:
                        - 700
                    - type: number
                      enum:
                        - 800
                    - type: number
                      enum:
                        - 900
                  nullable: true
                h1FontSize:
                  type: number
                  minimum: 10
                  maximum: 100
                  nullable: true
                h2FontSize:
                  type: number
                  minimum: 10
                  maximum: 100
                  nullable: true
                lineHeight:
                  type: number
                  minimum: 10
                  maximum: 50
                  nullable: true
                linkColor:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
              additionalProperties: false
              nullable: true
            launcherBeacon:
              type: object
              properties:
                color:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
                size:
                  type: number
                  minimum: 1
                  maximum: 100
                  nullable: true
              additionalProperties: false
              nullable: true
            launcherButtons:
              type: object
              properties:
                borderRadius:
                  type: number
                  minimum: 0
                  maximum: 100
                  nullable: true
                height:
                  type: number
                  minimum: 1
                  maximum: 200
                  nullable: true
                primary:
                  type: object
                  properties:
                    backgroundColor:
                      type: object
                      properties:
                        active:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        background:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        hover:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                      additionalProperties: false
                      nullable: true
                    border:
                      type: object
                      properties:
                        borderWidth:
                          type: number
                          minimum: 0
                          maximum: 100
                          nullable: true
                        color:
                          type: object
                          properties:
                            active:
                              anyOf:
                                - type: string
                                  pattern: >-
                                    ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                - type: string
                                  enum:
                                    - Auto
                              description: >-
                                A hex color (e.g. "#2563eb"), or the literal
                                "Auto" to derive the value from the theme's base
                                colors. Reads return the stored intent — "Auto"
                                comes back as "Auto", not resolved.
                              nullable: true
                            color:
                              anyOf:
                                - type: string
                                  pattern: >-
                                    ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                - type: string
                                  enum:
                                    - Auto
                              description: >-
                                A hex color (e.g. "#2563eb"), or the literal
                                "Auto" to derive the value from the theme's base
                                colors. Reads return the stored intent — "Auto"
                                comes back as "Auto", not resolved.
                              nullable: true
                            hover:
                              anyOf:
                                - type: string
                                  pattern: >-
                                    ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                - type: string
                                  enum:
                                    - Auto
                              description: >-
                                A hex color (e.g. "#2563eb"), or the literal
                                "Auto" to derive the value from the theme's base
                                colors. Reads return the stored intent — "Auto"
                                comes back as "Auto", not resolved.
                              nullable: true
                          additionalProperties: false
                          nullable: true
                        enabled:
                          type: boolean
                          nullable: true
                      additionalProperties: false
                      nullable: true
                    fontWeight:
                      anyOf:
                        - type: number
                          enum:
                            - 100
                        - type: number
                          enum:
                            - 200
                        - type: number
                          enum:
                            - 300
                        - type: number
                          enum:
                            - 400
                        - type: number
                          enum:
                            - 500
                        - type: number
                          enum:
                            - 600
                        - type: number
                          enum:
                            - 700
                        - type: number
                          enum:
                            - 800
                        - type: number
                          enum:
                            - 900
                      nullable: true
                    textColor:
                      type: object
                      properties:
                        active:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        color:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                        hover:
                          anyOf:
                            - type: string
                              pattern: >-
                                ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            - type: string
                              enum:
                                - Auto
                          description: >-
                            A hex color (e.g. "#2563eb"), or the literal "Auto"
                            to derive the value from the theme's base colors.
                            Reads return the stored intent — "Auto" comes back
                            as "Auto", not resolved.
                          nullable: true
                      additionalProperties: false
                      nullable: true
                  additionalProperties: false
                  nullable: true
                px:
                  type: number
                  minimum: 0
                  maximum: 100
                  nullable: true
                width:
                  type: number
                  minimum: 1
                  maximum: 200
                  nullable: true
              additionalProperties: false
              nullable: true
            launcherIcon:
              type: object
              properties:
                color:
                  type: object
                  properties:
                    active:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    color:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    hover:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                  additionalProperties: false
                  nullable: true
                opacity:
                  description: Percent, 0-100 (not 0-1).
                  type: number
                  minimum: 0
                  maximum: 100
                  nullable: true
                size:
                  type: number
                  minimum: 1
                  maximum: 200
                  nullable: true
              additionalProperties: false
              nullable: true
            mainColor:
              type: object
              properties:
                active:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
                background:
                  type: string
                  pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                  nullable: true
                color:
                  type: string
                  pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                  nullable: true
                hover:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
              additionalProperties: false
              nullable: true
            modal:
              type: object
              properties:
                backdropClickBehavior:
                  type: string
                  enum:
                    - do-nothing
                    - dismiss-flow
                    - null
                  nullable: true
                padding:
                  type: number
                  minimum: 0
                  maximum: 100
                  nullable: true
                width:
                  type: number
                  minimum: 100
                  maximum: 1000
                  nullable: true
              additionalProperties: false
              nullable: true
            progress:
              type: object
              properties:
                chainRoundedHeight:
                  description: Pixels. Applies ONLY when progress.type is "chain-rounded".
                  type: number
                  minimum: 1
                  maximum: 10
                  nullable: true
                chainSquaredHeight:
                  description: Pixels. Applies ONLY when progress.type is "chain-squared".
                  type: number
                  minimum: 1
                  maximum: 10
                  nullable: true
                color:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
                dotsHeight:
                  description: Pixels. Applies ONLY when progress.type is "dots".
                  type: number
                  minimum: 1
                  maximum: 10
                  nullable: true
                enabled:
                  type: boolean
                  nullable: true
                height:
                  description: >-
                    Pixels. Applies ONLY when progress.type is "full-width" —
                    each progress type reads its own height key.
                  type: number
                  minimum: 0
                  maximum: 10
                  nullable: true
                narrowHeight:
                  description: Pixels. Applies ONLY when progress.type is "narrow".
                  type: number
                  minimum: 1
                  maximum: 10
                  nullable: true
                numberedHeight:
                  description: Pixels. Applies ONLY when progress.type is "numbered".
                  type: number
                  minimum: 1
                  maximum: 100
                  nullable: true
                position:
                  type: string
                  enum:
                    - top
                    - bottom
                    - null
                  nullable: true
                type:
                  type: string
                  enum:
                    - full-width
                    - narrow
                    - chain-rounded
                    - chain-squared
                    - dots
                    - numbered
                    - null
                  nullable: true
              additionalProperties: false
              nullable: true
            resourceCenter:
              type: object
              properties:
                headerBackground:
                  type: object
                  properties:
                    color:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    gradientFrom:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    gradientTo:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    type:
                      type: string
                      enum:
                        - none
                        - color
                        - gradient
                        - image
                        - null
                      nullable: true
                    imageUrl:
                      type: string
                      description: >-
                        Image URL rendered to end users (writable). Empty string
                        clears it. Any http(s) URL you host.
                      nullable: true
                  additionalProperties: false
                  nullable: true
                largeWidth:
                  type: number
                  minimum: 100
                  maximum: 2000
                  nullable: true
                maxHeight:
                  type: number
                  minimum: 100
                  maximum: 2000
                  nullable: true
                normalWidth:
                  type: number
                  minimum: 100
                  maximum: 1000
                  nullable: true
                offsetX:
                  type: number
                  minimum: 0
                  maximum: 1000
                  nullable: true
                offsetY:
                  type: number
                  minimum: 0
                  maximum: 1000
                  nullable: true
                placement:
                  type: string
                  enum:
                    - top-left
                    - top-right
                    - bottom-left
                    - bottom-right
                    - null
                  nullable: true
                transitionDuration:
                  description: Milliseconds.
                  type: number
                  minimum: 0
                  maximum: 10000
                  nullable: true
                zIndex:
                  type: number
                  nullable: true
                dividerLines:
                  type: boolean
                  description: >-
                    Read-only through the API: echo it back unchanged or omit it
                    — a changed value is rejected.
                  nullable: true
                logoUrl:
                  type: string
                  description: >-
                    Image URL rendered to end users (writable). Empty string
                    clears it. Any http(s) URL you host.
                  nullable: true
              additionalProperties: false
              nullable: true
            resourceCenterLauncherButton:
              type: object
              properties:
                borderRadius:
                  type: number
                  minimum: 0
                  maximum: 100
                  nullable: true
                color:
                  type: object
                  properties:
                    active:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    background:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    foreground:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                    hover:
                      anyOf:
                        - type: string
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        - type: string
                          enum:
                            - Auto
                      description: >-
                        A hex color (e.g. "#2563eb"), or the literal "Auto" to
                        derive the value from the theme's base colors. Reads
                        return the stored intent — "Auto" comes back as "Auto",
                        not resolved.
                      nullable: true
                  additionalProperties: false
                  nullable: true
                height:
                  type: number
                  minimum: 10
                  maximum: 200
                  nullable: true
                iconType:
                  type: string
                  enum:
                    - default-question-mark
                    - plaintext-question-mark
                    - custom
                    - null
                  nullable: true
                imageHeight:
                  type: number
                  minimum: 10
                  maximum: 200
                  nullable: true
                textMode:
                  type: string
                  enum:
                    - resource-center-text
                    - no-text
                    - null
                  nullable: true
                iconUrl:
                  type: string
                  description: >-
                    Image URL rendered to end users (writable). Empty string
                    clears it. Any http(s) URL you host.
                  nullable: true
              additionalProperties: false
              nullable: true
            resourceCenterUnreadBadge:
              type: object
              properties:
                backgroundColor:
                  type: string
                  pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                  nullable: true
                textColor:
                  type: string
                  pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                  nullable: true
              additionalProperties: false
              nullable: true
            survey:
              type: object
              properties:
                color:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
              additionalProperties: false
              nullable: true
            tooltip:
              type: object
              properties:
                missingTargetBehavior:
                  type: string
                  enum:
                    - auto-dismiss
                    - use-bubble
                    - null
                  nullable: true
                missingTargetTolerance:
                  description: >-
                    SECONDS to keep looking for a missing tooltip target before
                    missingTargetBehavior kicks in. A runtime SDK missing-target
                    setting, when configured, takes precedence over this.
                  type: number
                  minimum: 0
                  maximum: 10
                  nullable: true
                notchSize:
                  type: number
                  minimum: 5
                  maximum: 100
                  nullable: true
                width:
                  type: number
                  minimum: 100
                  maximum: 1000
                  nullable: true
              additionalProperties: false
              nullable: true
            xbutton:
              type: object
              properties:
                color:
                  anyOf:
                    - type: string
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                    - type: string
                      enum:
                        - Auto
                  description: >-
                    A hex color (e.g. "#2563eb"), or the literal "Auto" to
                    derive the value from the theme's base colors. Reads return
                    the stored intent — "Auto" comes back as "Auto", not
                    resolved.
                  nullable: true
              additionalProperties: false
              nullable: true
          additionalProperties: false
        variations:
          description: >-
            Conditional variations — FULL replacement of the list when present
            (a variation you omit is deleted; omit the field entirely to leave
            variations untouched). Array order is evaluation priority.
          type: array
          items:
            type: object
            properties:
              id:
                description: >-
                  Echo an existing variation id (from a theme read with the
                  variations expand) to update it in place — its stored settings
                  are the merge base. Omit to create a new variation (the theme
                  base settings are the merge base).
                type: string
              name:
                type: string
                minLength: 1
                description: Human-readable label for this variation.
              conditions:
                minItems: 1
                type: array
                items:
                  $ref: '#/components/schemas/UpdateThemeBodyDto__schema0'
                description: >-
                  When this variation applies — evaluated in the BROWSER on each
                  render; the first variation (in array order) whose conditions
                  match wins, else the base settings apply. Takes user attribute
                  / current_url conditions and groups of them.
              settings:
                description: Partial style patch merged onto the merge base (see `id`).
                type: object
                properties:
                  announcement:
                    type: object
                    properties:
                      bubbleWidth:
                        type: number
                        minimum: 100
                        maximum: 1000
                        nullable: true
                      modalWidth:
                        type: number
                        minimum: 100
                        maximum: 1000
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  avatar:
                    type: object
                    properties:
                      size:
                        type: number
                        minimum: 10
                        maximum: 200
                        nullable: true
                      type:
                        type: string
                        enum:
                          - cartoon
                          - upload
                          - url
                          - none
                          - null
                        description: >-
                          Read-only through the API: echo it back unchanged or
                          omit it — a changed value is rejected.
                        nullable: true
                      url:
                        type: string
                        description: >-
                          Read-only through the API: echo it back unchanged or
                          omit it — a changed value is rejected.
                        nullable: true
                      name:
                        type: string
                        description: >-
                          Read-only through the API: echo it back unchanged or
                          omit it — a changed value is rejected.
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  backdrop:
                    type: object
                    properties:
                      color:
                        type: string
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        nullable: true
                      highlight:
                        type: object
                        properties:
                          color:
                            type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                            nullable: true
                          opacity:
                            description: Percent, 0-100 (not 0-1).
                            type: number
                            minimum: 0
                            maximum: 100
                            nullable: true
                          radius:
                            type: number
                            minimum: 0
                            maximum: 100
                            nullable: true
                          spread:
                            type: number
                            minimum: 0
                            maximum: 100
                            nullable: true
                          type:
                            type: string
                            enum:
                              - outside
                              - inside
                              - null
                            nullable: true
                        additionalProperties: false
                        nullable: true
                      opacity:
                        description: Percent, 0-100 (not 0-1).
                        type: number
                        minimum: 0
                        maximum: 100
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  banner:
                    type: object
                    properties:
                      animationDuration:
                        description: Milliseconds.
                        type: number
                        minimum: 0
                        maximum: 10000
                        nullable: true
                      animationTiming:
                        type: string
                        enum:
                          - smooth
                          - snappy
                          - gentle
                          - linear
                          - null
                        nullable: true
                      backgroundColor:
                        type: object
                        properties:
                          background:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                        additionalProperties: false
                        nullable: true
                      padding:
                        type: number
                        minimum: 0
                        maximum: 100
                        nullable: true
                      textColor:
                        type: object
                        properties:
                          color:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                        additionalProperties: false
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  border:
                    type: object
                    properties:
                      borderColor:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                      borderRadius:
                        type: number
                        minimum: 0
                        nullable: true
                      borderWidth:
                        type: number
                        minimum: 0
                        maximum: 50
                        nullable: true
                      borderWidthEnabled:
                        type: boolean
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  brandColor:
                    type: object
                    properties:
                      active:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                      background:
                        type: string
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        nullable: true
                      color:
                        type: string
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        nullable: true
                      hover:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  bubble:
                    type: object
                    properties:
                      placement:
                        type: object
                        properties:
                          position:
                            type: string
                            enum:
                              - leftTop
                              - centerTop
                              - rightTop
                              - leftBottom
                              - centerBottom
                              - rightBottom
                              - center
                              - null
                            nullable: true
                          positionOffsetX:
                            type: number
                            minimum: -1000
                            maximum: 1000
                            nullable: true
                          positionOffsetY:
                            type: number
                            minimum: -1000
                            maximum: 1000
                            nullable: true
                        additionalProperties: false
                        nullable: true
                      width:
                        type: number
                        minimum: 100
                        maximum: 1000
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  buttons:
                    type: object
                    properties:
                      borderRadius:
                        type: number
                        minimum: 0
                        maximum: 100
                        nullable: true
                      height:
                        type: number
                        minimum: 1
                        maximum: 100
                        nullable: true
                      minWidth:
                        type: number
                        minimum: 0
                        maximum: 500
                        nullable: true
                      primary:
                        type: object
                        properties:
                          backgroundColor:
                            type: object
                            properties:
                              active:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              background:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              hover:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                            additionalProperties: false
                            nullable: true
                          border:
                            type: object
                            properties:
                              borderWidth:
                                type: number
                                minimum: 0
                                maximum: 20
                                nullable: true
                              color:
                                type: object
                                properties:
                                  active:
                                    anyOf:
                                      - type: string
                                        pattern: >-
                                          ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                      - type: string
                                        enum:
                                          - Auto
                                    description: >-
                                      A hex color (e.g. "#2563eb"), or the
                                      literal "Auto" to derive the value from
                                      the theme's base colors. Reads return the
                                      stored intent — "Auto" comes back as
                                      "Auto", not resolved.
                                    nullable: true
                                  color:
                                    anyOf:
                                      - type: string
                                        pattern: >-
                                          ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                      - type: string
                                        enum:
                                          - Auto
                                    description: >-
                                      A hex color (e.g. "#2563eb"), or the
                                      literal "Auto" to derive the value from
                                      the theme's base colors. Reads return the
                                      stored intent — "Auto" comes back as
                                      "Auto", not resolved.
                                    nullable: true
                                  hover:
                                    anyOf:
                                      - type: string
                                        pattern: >-
                                          ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                      - type: string
                                        enum:
                                          - Auto
                                    description: >-
                                      A hex color (e.g. "#2563eb"), or the
                                      literal "Auto" to derive the value from
                                      the theme's base colors. Reads return the
                                      stored intent — "Auto" comes back as
                                      "Auto", not resolved.
                                    nullable: true
                                additionalProperties: false
                                nullable: true
                              enabled:
                                type: boolean
                                nullable: true
                            additionalProperties: false
                            nullable: true
                          fontWeight:
                            anyOf:
                              - type: number
                                enum:
                                  - 100
                              - type: number
                                enum:
                                  - 200
                              - type: number
                                enum:
                                  - 300
                              - type: number
                                enum:
                                  - 400
                              - type: number
                                enum:
                                  - 500
                              - type: number
                                enum:
                                  - 600
                              - type: number
                                enum:
                                  - 700
                              - type: number
                                enum:
                                  - 800
                              - type: number
                                enum:
                                  - 900
                            nullable: true
                          textColor:
                            type: object
                            properties:
                              active:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              color:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              hover:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                            additionalProperties: false
                            nullable: true
                        additionalProperties: false
                        nullable: true
                      px:
                        type: number
                        minimum: 0
                        maximum: 100
                        nullable: true
                      secondary:
                        type: object
                        properties:
                          backgroundColor:
                            type: object
                            properties:
                              active:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              background:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              hover:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                            additionalProperties: false
                            nullable: true
                          border:
                            type: object
                            properties:
                              borderWidth:
                                type: number
                                minimum: 0
                                maximum: 20
                                nullable: true
                              color:
                                type: object
                                properties:
                                  active:
                                    anyOf:
                                      - type: string
                                        pattern: >-
                                          ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                      - type: string
                                        enum:
                                          - Auto
                                    description: >-
                                      A hex color (e.g. "#2563eb"), or the
                                      literal "Auto" to derive the value from
                                      the theme's base colors. Reads return the
                                      stored intent — "Auto" comes back as
                                      "Auto", not resolved.
                                    nullable: true
                                  color:
                                    anyOf:
                                      - type: string
                                        pattern: >-
                                          ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                      - type: string
                                        enum:
                                          - Auto
                                    description: >-
                                      A hex color (e.g. "#2563eb"), or the
                                      literal "Auto" to derive the value from
                                      the theme's base colors. Reads return the
                                      stored intent — "Auto" comes back as
                                      "Auto", not resolved.
                                    nullable: true
                                  hover:
                                    anyOf:
                                      - type: string
                                        pattern: >-
                                          ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                      - type: string
                                        enum:
                                          - Auto
                                    description: >-
                                      A hex color (e.g. "#2563eb"), or the
                                      literal "Auto" to derive the value from
                                      the theme's base colors. Reads return the
                                      stored intent — "Auto" comes back as
                                      "Auto", not resolved.
                                    nullable: true
                                additionalProperties: false
                                nullable: true
                              enabled:
                                type: boolean
                                nullable: true
                            additionalProperties: false
                            nullable: true
                          fontWeight:
                            anyOf:
                              - type: number
                                enum:
                                  - 100
                              - type: number
                                enum:
                                  - 200
                              - type: number
                                enum:
                                  - 300
                              - type: number
                                enum:
                                  - 400
                              - type: number
                                enum:
                                  - 500
                              - type: number
                                enum:
                                  - 600
                              - type: number
                                enum:
                                  - 700
                              - type: number
                                enum:
                                  - 800
                              - type: number
                                enum:
                                  - 900
                            nullable: true
                          textColor:
                            type: object
                            properties:
                              active:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              color:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              hover:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                            additionalProperties: false
                            nullable: true
                        additionalProperties: false
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  checklist:
                    type: object
                    properties:
                      checkmarkColor:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                      completedTaskTextDecoration:
                        type: string
                        enum:
                          - none
                          - line-through
                          - null
                        nullable: true
                      placement:
                        type: object
                        properties:
                          position:
                            type: string
                            enum:
                              - leftTop
                              - rightTop
                              - leftBottom
                              - rightBottom
                              - center
                              - null
                            nullable: true
                          positionOffsetX:
                            type: number
                            minimum: 0
                            maximum: 1000
                            nullable: true
                          positionOffsetY:
                            type: number
                            minimum: 0
                            maximum: 1000
                            nullable: true
                        additionalProperties: false
                        nullable: true
                      width:
                        type: number
                        minimum: 100
                        maximum: 1000
                        nullable: true
                      zIndex:
                        type: number
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  checklistLauncher:
                    type: object
                    properties:
                      borderRadius:
                        type: number
                        minimum: 0
                        maximum: 100
                        nullable: true
                      color:
                        type: object
                        properties:
                          active:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          background:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          color:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          hover:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                        additionalProperties: false
                        nullable: true
                      counter:
                        type: object
                        properties:
                          background:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          color:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                        additionalProperties: false
                        nullable: true
                      fontWeight:
                        anyOf:
                          - type: number
                            enum:
                              - 100
                          - type: number
                            enum:
                              - 200
                          - type: number
                            enum:
                              - 300
                          - type: number
                            enum:
                              - 400
                          - type: number
                            enum:
                              - 500
                          - type: number
                            enum:
                              - 600
                          - type: number
                            enum:
                              - 700
                          - type: number
                            enum:
                              - 800
                          - type: number
                            enum:
                              - 900
                        nullable: true
                      height:
                        type: number
                        minimum: 10
                        maximum: 200
                        nullable: true
                      placement:
                        type: object
                        properties:
                          position:
                            type: string
                            enum:
                              - leftTop
                              - rightTop
                              - leftBottom
                              - rightBottom
                              - center
                              - null
                            nullable: true
                          positionOffsetX:
                            type: number
                            minimum: 0
                            maximum: 1000
                            nullable: true
                          positionOffsetY:
                            type: number
                            minimum: 0
                            maximum: 1000
                            nullable: true
                        additionalProperties: false
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  customCss:
                    type: string
                    nullable: true
                  focusHighlight:
                    type: object
                    properties:
                      color:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                      opacity:
                        description: Percent, 0-100 (not 0-1).
                        type: number
                        minimum: 0
                        maximum: 100
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  font:
                    type: object
                    properties:
                      customFontFamily:
                        type: string
                        description: >-
                          Font family name used when font.fontFamily is "Custom
                          font" (declare the face itself via customCss
                          @font-face). When set this way it OVERRIDES
                          font.fontFamily at render.
                        nullable: true
                      fontFamily:
                        type: string
                        nullable: true
                      fontSize:
                        type: number
                        minimum: 10
                        maximum: 50
                        nullable: true
                      fontWeightBold:
                        anyOf:
                          - type: number
                            enum:
                              - 100
                          - type: number
                            enum:
                              - 200
                          - type: number
                            enum:
                              - 300
                          - type: number
                            enum:
                              - 400
                          - type: number
                            enum:
                              - 500
                          - type: number
                            enum:
                              - 600
                          - type: number
                            enum:
                              - 700
                          - type: number
                            enum:
                              - 800
                          - type: number
                            enum:
                              - 900
                        nullable: true
                      fontWeightNormal:
                        anyOf:
                          - type: number
                            enum:
                              - 100
                          - type: number
                            enum:
                              - 200
                          - type: number
                            enum:
                              - 300
                          - type: number
                            enum:
                              - 400
                          - type: number
                            enum:
                              - 500
                          - type: number
                            enum:
                              - 600
                          - type: number
                            enum:
                              - 700
                          - type: number
                            enum:
                              - 800
                          - type: number
                            enum:
                              - 900
                        nullable: true
                      h1FontSize:
                        type: number
                        minimum: 10
                        maximum: 100
                        nullable: true
                      h2FontSize:
                        type: number
                        minimum: 10
                        maximum: 100
                        nullable: true
                      lineHeight:
                        type: number
                        minimum: 10
                        maximum: 50
                        nullable: true
                      linkColor:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  launcherBeacon:
                    type: object
                    properties:
                      color:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                      size:
                        type: number
                        minimum: 1
                        maximum: 100
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  launcherButtons:
                    type: object
                    properties:
                      borderRadius:
                        type: number
                        minimum: 0
                        maximum: 100
                        nullable: true
                      height:
                        type: number
                        minimum: 1
                        maximum: 200
                        nullable: true
                      primary:
                        type: object
                        properties:
                          backgroundColor:
                            type: object
                            properties:
                              active:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              background:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              hover:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                            additionalProperties: false
                            nullable: true
                          border:
                            type: object
                            properties:
                              borderWidth:
                                type: number
                                minimum: 0
                                maximum: 100
                                nullable: true
                              color:
                                type: object
                                properties:
                                  active:
                                    anyOf:
                                      - type: string
                                        pattern: >-
                                          ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                      - type: string
                                        enum:
                                          - Auto
                                    description: >-
                                      A hex color (e.g. "#2563eb"), or the
                                      literal "Auto" to derive the value from
                                      the theme's base colors. Reads return the
                                      stored intent — "Auto" comes back as
                                      "Auto", not resolved.
                                    nullable: true
                                  color:
                                    anyOf:
                                      - type: string
                                        pattern: >-
                                          ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                      - type: string
                                        enum:
                                          - Auto
                                    description: >-
                                      A hex color (e.g. "#2563eb"), or the
                                      literal "Auto" to derive the value from
                                      the theme's base colors. Reads return the
                                      stored intent — "Auto" comes back as
                                      "Auto", not resolved.
                                    nullable: true
                                  hover:
                                    anyOf:
                                      - type: string
                                        pattern: >-
                                          ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                      - type: string
                                        enum:
                                          - Auto
                                    description: >-
                                      A hex color (e.g. "#2563eb"), or the
                                      literal "Auto" to derive the value from
                                      the theme's base colors. Reads return the
                                      stored intent — "Auto" comes back as
                                      "Auto", not resolved.
                                    nullable: true
                                additionalProperties: false
                                nullable: true
                              enabled:
                                type: boolean
                                nullable: true
                            additionalProperties: false
                            nullable: true
                          fontWeight:
                            anyOf:
                              - type: number
                                enum:
                                  - 100
                              - type: number
                                enum:
                                  - 200
                              - type: number
                                enum:
                                  - 300
                              - type: number
                                enum:
                                  - 400
                              - type: number
                                enum:
                                  - 500
                              - type: number
                                enum:
                                  - 600
                              - type: number
                                enum:
                                  - 700
                              - type: number
                                enum:
                                  - 800
                              - type: number
                                enum:
                                  - 900
                            nullable: true
                          textColor:
                            type: object
                            properties:
                              active:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              color:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                              hover:
                                anyOf:
                                  - type: string
                                    pattern: >-
                                      ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                                  - type: string
                                    enum:
                                      - Auto
                                description: >-
                                  A hex color (e.g. "#2563eb"), or the literal
                                  "Auto" to derive the value from the theme's
                                  base colors. Reads return the stored intent —
                                  "Auto" comes back as "Auto", not resolved.
                                nullable: true
                            additionalProperties: false
                            nullable: true
                        additionalProperties: false
                        nullable: true
                      px:
                        type: number
                        minimum: 0
                        maximum: 100
                        nullable: true
                      width:
                        type: number
                        minimum: 1
                        maximum: 200
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  launcherIcon:
                    type: object
                    properties:
                      color:
                        type: object
                        properties:
                          active:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          color:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          hover:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                        additionalProperties: false
                        nullable: true
                      opacity:
                        description: Percent, 0-100 (not 0-1).
                        type: number
                        minimum: 0
                        maximum: 100
                        nullable: true
                      size:
                        type: number
                        minimum: 1
                        maximum: 200
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  mainColor:
                    type: object
                    properties:
                      active:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                      background:
                        type: string
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        nullable: true
                      color:
                        type: string
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        nullable: true
                      hover:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  modal:
                    type: object
                    properties:
                      backdropClickBehavior:
                        type: string
                        enum:
                          - do-nothing
                          - dismiss-flow
                          - null
                        nullable: true
                      padding:
                        type: number
                        minimum: 0
                        maximum: 100
                        nullable: true
                      width:
                        type: number
                        minimum: 100
                        maximum: 1000
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  progress:
                    type: object
                    properties:
                      chainRoundedHeight:
                        description: >-
                          Pixels. Applies ONLY when progress.type is
                          "chain-rounded".
                        type: number
                        minimum: 1
                        maximum: 10
                        nullable: true
                      chainSquaredHeight:
                        description: >-
                          Pixels. Applies ONLY when progress.type is
                          "chain-squared".
                        type: number
                        minimum: 1
                        maximum: 10
                        nullable: true
                      color:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                      dotsHeight:
                        description: Pixels. Applies ONLY when progress.type is "dots".
                        type: number
                        minimum: 1
                        maximum: 10
                        nullable: true
                      enabled:
                        type: boolean
                        nullable: true
                      height:
                        description: >-
                          Pixels. Applies ONLY when progress.type is
                          "full-width" — each progress type reads its own height
                          key.
                        type: number
                        minimum: 0
                        maximum: 10
                        nullable: true
                      narrowHeight:
                        description: Pixels. Applies ONLY when progress.type is "narrow".
                        type: number
                        minimum: 1
                        maximum: 10
                        nullable: true
                      numberedHeight:
                        description: Pixels. Applies ONLY when progress.type is "numbered".
                        type: number
                        minimum: 1
                        maximum: 100
                        nullable: true
                      position:
                        type: string
                        enum:
                          - top
                          - bottom
                          - null
                        nullable: true
                      type:
                        type: string
                        enum:
                          - full-width
                          - narrow
                          - chain-rounded
                          - chain-squared
                          - dots
                          - numbered
                          - null
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  resourceCenter:
                    type: object
                    properties:
                      headerBackground:
                        type: object
                        properties:
                          color:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          gradientFrom:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          gradientTo:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          type:
                            type: string
                            enum:
                              - none
                              - color
                              - gradient
                              - image
                              - null
                            nullable: true
                          imageUrl:
                            type: string
                            description: >-
                              Image URL rendered to end users (writable). Empty
                              string clears it. Any http(s) URL you host.
                            nullable: true
                        additionalProperties: false
                        nullable: true
                      largeWidth:
                        type: number
                        minimum: 100
                        maximum: 2000
                        nullable: true
                      maxHeight:
                        type: number
                        minimum: 100
                        maximum: 2000
                        nullable: true
                      normalWidth:
                        type: number
                        minimum: 100
                        maximum: 1000
                        nullable: true
                      offsetX:
                        type: number
                        minimum: 0
                        maximum: 1000
                        nullable: true
                      offsetY:
                        type: number
                        minimum: 0
                        maximum: 1000
                        nullable: true
                      placement:
                        type: string
                        enum:
                          - top-left
                          - top-right
                          - bottom-left
                          - bottom-right
                          - null
                        nullable: true
                      transitionDuration:
                        description: Milliseconds.
                        type: number
                        minimum: 0
                        maximum: 10000
                        nullable: true
                      zIndex:
                        type: number
                        nullable: true
                      dividerLines:
                        type: boolean
                        description: >-
                          Read-only through the API: echo it back unchanged or
                          omit it — a changed value is rejected.
                        nullable: true
                      logoUrl:
                        type: string
                        description: >-
                          Image URL rendered to end users (writable). Empty
                          string clears it. Any http(s) URL you host.
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  resourceCenterLauncherButton:
                    type: object
                    properties:
                      borderRadius:
                        type: number
                        minimum: 0
                        maximum: 100
                        nullable: true
                      color:
                        type: object
                        properties:
                          active:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          background:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          foreground:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                          hover:
                            anyOf:
                              - type: string
                                pattern: >-
                                  ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                              - type: string
                                enum:
                                  - Auto
                            description: >-
                              A hex color (e.g. "#2563eb"), or the literal
                              "Auto" to derive the value from the theme's base
                              colors. Reads return the stored intent — "Auto"
                              comes back as "Auto", not resolved.
                            nullable: true
                        additionalProperties: false
                        nullable: true
                      height:
                        type: number
                        minimum: 10
                        maximum: 200
                        nullable: true
                      iconType:
                        type: string
                        enum:
                          - default-question-mark
                          - plaintext-question-mark
                          - custom
                          - null
                        nullable: true
                      imageHeight:
                        type: number
                        minimum: 10
                        maximum: 200
                        nullable: true
                      textMode:
                        type: string
                        enum:
                          - resource-center-text
                          - no-text
                          - null
                        nullable: true
                      iconUrl:
                        type: string
                        description: >-
                          Image URL rendered to end users (writable). Empty
                          string clears it. Any http(s) URL you host.
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  resourceCenterUnreadBadge:
                    type: object
                    properties:
                      backgroundColor:
                        type: string
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        nullable: true
                      textColor:
                        type: string
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  survey:
                    type: object
                    properties:
                      color:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  tooltip:
                    type: object
                    properties:
                      missingTargetBehavior:
                        type: string
                        enum:
                          - auto-dismiss
                          - use-bubble
                          - null
                        nullable: true
                      missingTargetTolerance:
                        description: >-
                          SECONDS to keep looking for a missing tooltip target
                          before missingTargetBehavior kicks in. A runtime SDK
                          missing-target setting, when configured, takes
                          precedence over this.
                        type: number
                        minimum: 0
                        maximum: 10
                        nullable: true
                      notchSize:
                        type: number
                        minimum: 5
                        maximum: 100
                        nullable: true
                      width:
                        type: number
                        minimum: 100
                        maximum: 1000
                        nullable: true
                    additionalProperties: false
                    nullable: true
                  xbutton:
                    type: object
                    properties:
                      color:
                        anyOf:
                          - type: string
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
                          - type: string
                            enum:
                              - Auto
                        description: >-
                          A hex color (e.g. "#2563eb"), or the literal "Auto" to
                          derive the value from the theme's base colors. Reads
                          return the stored intent — "Auto" comes back as
                          "Auto", not resolved.
                        nullable: true
                    additionalProperties: false
                    nullable: true
                additionalProperties: false
            required:
              - name
              - conditions
            additionalProperties: false
      additionalProperties: false
    ThemeDto:
      type: object
      properties:
        id:
          type: string
        object:
          type: string
          enum:
            - theme
        name:
          type: string
        isDefault:
          type: boolean
        isSystem:
          type: boolean
          description: >-
            Built-in theme: read-only — it cannot be updated or deleted
            (duplicating it into your own theme is the way to start from it). It
            CAN be made the project default.
        updatedAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
        variationCount:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            How many conditional variations this theme carries (always present,
            no expand needed). Check it BEFORE pointing content at another
            theme: variations do NOT travel with the content, so moving from a
            theme with variations to one with 0 silently drops the conditional
            styling (e.g. dark mode) for every user those conditions targeted —
            nothing errors. Read the variations themselves with expand:
            ["variations"].
        settings:
          description: >-
            Stored style INTENT — the same shape as the create/update `settings`
            body (that write schema is the field dictionary); Auto-capable
            colors read back as the literal "Auto".
          type: object
          additionalProperties: {}
        resolvedSettings:
          description: >-
            Read-only render resolution of `settings` (the shared derivation the
            SDK runs). Two transformations: every "Auto" is replaced by the
            concrete derived color, and `font.fontFamily` is rewritten to the
            real font stack ("System font" → the system stack, "Custom font" →
            the `customFontFamily` value, named fonts gain a sans-serif
            fallback). Same field set as `settings` (stored settings are
            grounded complete at write) — differences between the two are
            exactly these derivations, so diff against the `settings` you wrote,
            not this, to find your edits. Request with expand:
            ["resolvedSettings"]. Not writable — author intent in `settings`.
          type: object
          additionalProperties: {}
        variations:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
              conditions:
                type: array
                items:
                  $ref: '#/components/schemas/ThemeDto__schema0'
              settings:
                type: object
                additionalProperties: {}
            required:
              - id
              - name
              - conditions
              - settings
      required:
        - id
        - object
        - name
        - isDefault
        - isSystem
        - updatedAt
        - createdAt
        - variationCount
    ErrorResponseDto:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: >-
                Stable machine-readable code (e.g. E1017). Match on this, never
                on `message`.
            message:
              type: string
              description: Human-readable summary. Wording may change between releases.
            issues:
              description: >-
                Validation errors (E1017) may carry one entry per problem so
                every field can be fixed in a single round-trip. Absent on other
                errors.
              type: array
              items:
                type: object
                properties:
                  rule:
                    type: string
                    description: >-
                      Which validation layer rejected it: schema |
                      reactive_condition | action_not_allowed | step_shape |
                      reference_target | auto_start | media_url. New values may
                      be added; treat an unknown value as a generic validation
                      failure.
                  message:
                    type: string
                  path:
                    description: >-
                      Path into the request body (e.g.
                      `steps[0].triggers[0].when[1]`).
                    type: string
                required:
                  - rule
                  - message
            doc_url:
              type: string
              description: Base URL of the API documentation.
      required:
        - error
    UpdateThemeBodyDto__schema0:
      oneOf:
        - type: object
          properties:
            type:
              type: string
              enum:
                - group
            match:
              type: string
              enum:
                - all
                - any
            conditions:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/UpdateThemeBodyDto__schema0'
              description: >-
                The grouped conditions — at least one. An EMPTY group is not "no
                filter": it never matches, so next to an AND it makes the whole
                rule unmatchable, and writing one is rejected. A version saved
                with an empty group in the BUILDER still reads back with it
                (validate warns); writing that list back is refused until the
                group is filled or dropped.
          required:
            - type
            - match
            - conditions
        - type: object
          properties:
            type:
              type: string
              enum:
                - attribute
            scope:
              type: string
              enum:
                - user
                - company
                - companyMembership
              description: >-
                Which entity owns the attribute — `user` (the end user),
                `company`, or `companyMembership`. Same value as the attribute
                definition's `scope` (see the attribute definitions list);
                required to disambiguate a codeName that exists in more than one
                scope.
            attribute:
              type: string
            op:
              type: string
              enum:
                - is
                - not
                - contains
                - not_contains
                - starts_with
                - ends_with
                - any
                - empty
                - lt
                - lte
                - gt
                - gte
                - between
                - 'true'
                - 'false'
                - includes_any
                - includes_all
                - not_includes_any
                - not_includes_all
                - less_than
                - exactly
                - more_than
                - before
                - 'on'
                - after
              description: >-
                Operator — the allowed set depends on the attribute dataType.
                String: is | not | contains | not_contains | starts_with |
                ends_with | any | empty. Number: is | not | lt | lte | gt | gte
                | between | any | empty. Boolean: true | false | any | empty.
                List: includes_any | includes_all | not_includes_any |
                not_includes_all | any | empty. DateTime: less_than | exactly |
                more_than (relative — `value` is a number of days) | before | on
                | after (`value` is an absolute date) | any | empty. The
                relative ops are ONE-SIDED bounds around (now − N days):
                `less_than N` = the date is AFTER now−N — so it also matches
                every FUTURE date, and on a future-dated attribute (a trial end,
                a renewal date) it is NOT "within the last N days"; `more_than
                N` = the date is BEFORE now−N. **"Signed up in the last N days"
                therefore needs BOTH bounds** — `less_than N` AND `more_than 0`
                in one `all` group; `less_than N` alone silently includes anyone
                whose date is in the future (a mis-mapped trial-end column, a
                clock/timezone slip), and those are exactly the users a new-user
                audience must not contain (observed in testing). Negative N
                shifts the bound into the future: the rolling "within the NEXT 7
                days" window is `less_than` value "0" AND `more_than` value "-7"
                (two conditions, both required). The relative ops are
                DAY-granularity only — no unit field; for hour/minute windows
                use an `event` condition with a `within` (which has a `unit`).
            value:
              description: >-
                The comparison value (string / number-as-string / date). Omit
                for any/empty/true/false.
              type: string
            value2:
              description: >-
                Upper bound for the `between` operator (`value` is the lower
                bound).
              type: string
            values:
              description: Values for the List operators (includes_any / includes_all / …).
              type: array
              items:
                type: string
          required:
            - type
            - scope
            - attribute
            - op
        - type: object
          properties:
            type:
              type: string
              enum:
                - segment
            segment:
              type: string
            in:
              type: boolean
          required:
            - type
            - segment
            - in
        - type: object
          properties:
            type:
              type: string
              enum:
                - current_url
            includes:
              type: array
              items:
                type: string
              description: >-
                URL patterns (anchored whole-url match, NOT substring/regex).
                `*` = wildcard within one url part; `:name` = one path segment.
                A bare `*` (i.e. `["*"]`) matches EVERY page on every host incl.
                deep paths — the canonical always-on / whole-site pattern (use
                it when content should be available everywhere). Scope it down
                instead with: `*/` (homepage only — path exactly `/`),
                `*/pricing` (one page), `*/app/*` (a section + below),
                `host.com/*` (any page on a specific host). Multiple patterns
                are OR-matched: the URL matches this list if it matches ANY one
                pattern (so "/tasks OR /dashboard" is one condition with both
                patterns here — no group needed).
            excludes:
              description: >-
                URL patterns to exclude (same syntax as includes); excludes win
                over includes.
              type: array
              items:
                type: string
          required:
            - type
            - includes
        - type: object
          properties:
            type:
              type: string
              enum:
                - element
            target:
              type: object
              properties:
                selector:
                  type: string
                  minLength: 1
                  description: >-
                    A stable CSS selector for the element. The runtime targets
                    the FIRST match — so either make the selector unique, or
                    pair a stable non-unique selector with `nth` to pick the
                    intended match. A non-unique selector with no `nth` targets
                    the first (often wrong) element and the tooltip silently
                    won't render.
                text:
                  description: >-
                    Optional refinement of `selector`. Requires the targeted
                    element's visible text to equal this (exact match, after
                    trim) — use it to pin a specific content/state (e.g. a
                    stable id whose displayed text you want to match: id +
                    text). It refines the element chosen by `selector`/`nth`; on
                    its own it does NOT search among multiple matches, so
                    disambiguate a non-unique selector with `nth`, not `text`
                    alone.
                  type: string
                nth:
                  description: >-
                    Optional refinement of `selector`. 0-based index to pick
                    which match when the selector isn't unique — e.g. a stable
                    selector matching 3 elements + `nth: 1` targets the 2nd,
                    giving a unique result. Matches are taken in document order
                    (as they appear in the page HTML). Range 0–4 — only the
                    first 5 matches are addressable; a larger value is rejected.
                  type: integer
                  minimum: 0
                  maximum: 4
              required:
                - selector
            state:
              type: string
              enum:
                - present
                - hidden
                - disabled
                - enabled
                - clicked
                - unclicked
              description: >-
                `present` means NOT CLIPPED AWAY: the element is in the DOM and
                its box lies inside the viewport / its scroll ancestors —
                scrolled off-screen or `display:none` never satisfies it (and
                `hidden` is its negation). It is NOT "the user can see something
                there": an EMPTY, zero-height placeholder node satisfies
                `present` (observed in testing: a checklist task keyed on an
                initially-empty `<p>` status line ticked itself the moment the
                checklist appeared, before the shopper did anything). So do not
                use element presence as a proxy for "the app has said
                something": most apps keep the container mounted and only fill
                in its text. Match the TEXT instead (`target.text` + `present`,
                or the negation trick: the old text `hidden`). Appearances
                shorter than about a second can be missed entirely.
                `disabled`/`enabled` read the element disabled state at
                evaluation time. **`clicked` means "clicked since page load AND
                the element is STILL in the DOM right now"** — both halves,
                re-checked every evaluation. The click memory latches (the
                listener attaches the FIRST time the condition is evaluated, so
                earlier clicks are invisible, and the memory survives a
                re-render), but the element lookup is redone each poll. Two
                consequences, one of them silent: (1) **an element that UNMOUNTS
                on click can NEVER satisfy it** — the click lands, the element
                vanishes, the lookup fails from then on and the condition stays
                false forever with no error (observed in testing: a tracker on a
                button that clears its own toolbar counted ZERO real clicks);
                (2) an element that unmounts and REMOUNTS satisfies it again, so
                a tracker gated on it fires once per remount — not once per page
                load. Unlike `present`, this lookup does NOT require viewport
                visibility: scrolling the target off-screen keeps `clicked`
                true. `unclicked` negates the same pair, so it is also false
                while the element is absent. To count a COMPLETED action,
                condition on what the app shows afterwards (a success toast, a
                state change) rather than `clicked` on the button that starts
                it.
          required:
            - type
            - state
        - type: object
          properties:
            type:
              type: string
              enum:
                - content_state
            content:
              type: string
              description: >-
                contentId of the FLOW or CHECKLIST whose per-user state to check
                (an id from the content list). Only flows and checklists record
                this state — referencing a banner / launcher / resource-center /
                tracker is rejected at write.
            state:
              type: string
              enum:
                - seen
                - unseen
                - completed
                - uncompleted
                - active
                - inactive
              description: >-
                The referenced flow/checklist's state for THIS user. seen =
                started at least once (for a flow, TRUE from the moment it
                opens; for a checklist, TRUE only once the user EXPANDS the
                panel — a `initialDisplay: "button"` checklist whose launcher is
                never clicked stays unseen forever); unseen = never started;
                active = currently open/running; inactive = NOT currently
                running (covers both never-started and ran-then-closed);
                completed = reached a goal/completion step; uncompleted = not
                completed. To gate piece B until flow A has run AND closed (the
                usual "show next thing after the welcome flow" sequencing), use
                `seen` AND `inactive` together — `seen` alone fires while A is
                still open (B piles on top), and `completed` alone strands users
                who skip/dismiss A.
          required:
            - type
            - content
            - state
        - type: object
          properties:
            type:
              type: string
              enum:
                - event
            event:
              type: string
            count:
              description: >-
                How many times the event must have occurred. Omit it for the
                common case "the event has happened" (treated as at_least 1).
                Set `op`/`n` for a threshold (`between` needs `n` and `n2`).
                `at_least`/`between` require n ≥ 1; use `at_most`/`exactly` with
                0 for "never happened".
              type: object
              properties:
                op:
                  type: string
                  enum:
                    - at_least
                    - at_most
                    - exactly
                    - between
                'n':
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                n2:
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
              required:
                - op
                - 'n'
            within:
              description: >-
                Optional time window for the event count. Omit it (or use
                `any_time`) to count over all time — "the event has ever
                happened". Any other `op` (`in_the_last` / `more_than` /
                `between`) requires BOTH `value` and `unit`, and `between` also
                `value2` — rejected at write otherwise.
              type: object
              properties:
                op:
                  type: string
                  enum:
                    - in_the_last
                    - more_than
                    - between
                    - any_time
                value:
                  type: number
                value2:
                  type: number
                unit:
                  type: string
                  enum:
                    - seconds
                    - minutes
                    - hours
                    - days
              required:
                - op
            scope:
              description: >-
                Whose event activity to count (default `current_user`).
                `current_user` = only this user's own events.
                `current_user_in_company` = this user's events, but counted
                within their currently-associated company context (needs the
                user associated to a company via `group()` / the
                company-membership API). `any_user_in_company` = events by ANY
                user in this user's company — account-level activity (e.g.
                "anyone on the account has done X"). The two company scopes
                require the user to be in a company or they never match.
              type: string
              enum:
                - current_user
                - current_user_in_company
                - any_user_in_company
            where:
              type: array
              items:
                $ref: '#/components/schemas/UpdateThemeBodyDto__schema1'
          required:
            - type
            - event
        - type: object
          properties:
            type:
              type: string
              enum:
                - text_input
            target:
              type: object
              properties:
                selector:
                  type: string
                  minLength: 1
                  description: >-
                    A stable CSS selector for the element. The runtime targets
                    the FIRST match — so either make the selector unique, or
                    pair a stable non-unique selector with `nth` to pick the
                    intended match. A non-unique selector with no `nth` targets
                    the first (often wrong) element and the tooltip silently
                    won't render.
                text:
                  description: >-
                    Optional refinement of `selector`. Requires the targeted
                    element's visible text to equal this (exact match, after
                    trim) — use it to pin a specific content/state (e.g. a
                    stable id whose displayed text you want to match: id +
                    text). It refines the element chosen by `selector`/`nth`; on
                    its own it does NOT search among multiple matches, so
                    disambiguate a non-unique selector with `nth`, not `text`
                    alone.
                  type: string
                nth:
                  description: >-
                    Optional refinement of `selector`. 0-based index to pick
                    which match when the selector isn't unique — e.g. a stable
                    selector matching 3 elements + `nth: 1` targets the 2nd,
                    giving a unique result. Matches are taken in document order
                    (as they appear in the page HTML). Range 0–4 — only the
                    first 5 matches are addressable; a larger value is rejected.
                  type: integer
                  minimum: 0
                  maximum: 4
              required:
                - selector
            op:
              type: string
              enum:
                - is
                - not
                - contains
                - not_contains
                - starts_with
                - ends_with
                - match
                - unmatch
                - any
                - empty
            value:
              type: string
          required:
            - type
            - op
        - type: object
          properties:
            type:
              type: string
              enum:
                - text_filled
            target:
              type: object
              properties:
                selector:
                  type: string
                  minLength: 1
                  description: >-
                    A stable CSS selector for the element. The runtime targets
                    the FIRST match — so either make the selector unique, or
                    pair a stable non-unique selector with `nth` to pick the
                    intended match. A non-unique selector with no `nth` targets
                    the first (often wrong) element and the tooltip silently
                    won't render.
                text:
                  description: >-
                    Optional refinement of `selector`. Requires the targeted
                    element's visible text to equal this (exact match, after
                    trim) — use it to pin a specific content/state (e.g. a
                    stable id whose displayed text you want to match: id +
                    text). It refines the element chosen by `selector`/`nth`; on
                    its own it does NOT search among multiple matches, so
                    disambiguate a non-unique selector with `nth`, not `text`
                    alone.
                  type: string
                nth:
                  description: >-
                    Optional refinement of `selector`. 0-based index to pick
                    which match when the selector isn't unique — e.g. a stable
                    selector matching 3 elements + `nth: 1` targets the 2nd,
                    giving a unique result. Matches are taken in document order
                    (as they appear in the page HTML). Range 0–4 — only the
                    first 5 matches are addressable; a larger value is rejected.
                  type: integer
                  minimum: 0
                  maximum: 4
              required:
                - selector
          required:
            - type
        - type: object
          properties:
            type:
              type: string
              enum:
                - time_window
            start:
              type: string
              description: >-
                Window start (ISO datetime). REQUIRED — the runtime never
                matches a window without a start, so an end-only window is
                rejected at write. For "until X" semantics, set start to any
                past instant and end to X.
            end:
              description: >-
                Window end (ISO datetime). Omit for an open-ended "from start
                onwards" window.
              type: string
          required:
            - type
            - start
        - type: object
          properties:
            type:
              type: string
              enum:
                - unsupported
            note:
              type: string
          required:
            - type
          description: >-
            Read-side placeholder for a stored condition this API cannot express
            (`note` says what it stands for — usually a DEAD condition the
            runtime never matches: a deleted attribute/event, an end-only time
            window). It cannot be written back (the placeholder carries no data
            to preserve): echoing it is rejected. Either remove it from the list
            you write — an explicit choice that DELETES the stored condition;
            mind that a never-matching node inside an AND list pins the whole
            rule to "never fires", so deleting it can bring the remaining
            conditions to life — or repair the original condition in the
            Usertour builder first.
    ThemeDto__schema0:
      oneOf:
        - type: object
          properties:
            type:
              type: string
              enum:
                - group
            match:
              type: string
              enum:
                - all
                - any
            conditions:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/ThemeDto__schema0'
              description: >-
                The grouped conditions — at least one. An EMPTY group is not "no
                filter": it never matches, so next to an AND it makes the whole
                rule unmatchable, and writing one is rejected. A version saved
                with an empty group in the BUILDER still reads back with it
                (validate warns); writing that list back is refused until the
                group is filled or dropped.
          required:
            - type
            - match
            - conditions
        - type: object
          properties:
            type:
              type: string
              enum:
                - attribute
            scope:
              type: string
              enum:
                - user
                - company
                - companyMembership
              description: >-
                Which entity owns the attribute — `user` (the end user),
                `company`, or `companyMembership`. Same value as the attribute
                definition's `scope` (see the attribute definitions list);
                required to disambiguate a codeName that exists in more than one
                scope.
            attribute:
              type: string
            op:
              type: string
              enum:
                - is
                - not
                - contains
                - not_contains
                - starts_with
                - ends_with
                - any
                - empty
                - lt
                - lte
                - gt
                - gte
                - between
                - 'true'
                - 'false'
                - includes_any
                - includes_all
                - not_includes_any
                - not_includes_all
                - less_than
                - exactly
                - more_than
                - before
                - 'on'
                - after
              description: >-
                Operator — the allowed set depends on the attribute dataType.
                String: is | not | contains | not_contains | starts_with |
                ends_with | any | empty. Number: is | not | lt | lte | gt | gte
                | between | any | empty. Boolean: true | false | any | empty.
                List: includes_any | includes_all | not_includes_any |
                not_includes_all | any | empty. DateTime: less_than | exactly |
                more_than (relative — `value` is a number of days) | before | on
                | after (`value` is an absolute date) | any | empty. The
                relative ops are ONE-SIDED bounds around (now − N days):
                `less_than N` = the date is AFTER now−N — so it also matches
                every FUTURE date, and on a future-dated attribute (a trial end,
                a renewal date) it is NOT "within the last N days"; `more_than
                N` = the date is BEFORE now−N. **"Signed up in the last N days"
                therefore needs BOTH bounds** — `less_than N` AND `more_than 0`
                in one `all` group; `less_than N` alone silently includes anyone
                whose date is in the future (a mis-mapped trial-end column, a
                clock/timezone slip), and those are exactly the users a new-user
                audience must not contain (observed in testing). Negative N
                shifts the bound into the future: the rolling "within the NEXT 7
                days" window is `less_than` value "0" AND `more_than` value "-7"
                (two conditions, both required). The relative ops are
                DAY-granularity only — no unit field; for hour/minute windows
                use an `event` condition with a `within` (which has a `unit`).
            value:
              description: >-
                The comparison value (string / number-as-string / date). Omit
                for any/empty/true/false.
              type: string
            value2:
              description: >-
                Upper bound for the `between` operator (`value` is the lower
                bound).
              type: string
            values:
              description: Values for the List operators (includes_any / includes_all / …).
              type: array
              items:
                type: string
          required:
            - type
            - scope
            - attribute
            - op
        - type: object
          properties:
            type:
              type: string
              enum:
                - segment
            segment:
              type: string
            in:
              type: boolean
          required:
            - type
            - segment
            - in
        - type: object
          properties:
            type:
              type: string
              enum:
                - current_url
            includes:
              type: array
              items:
                type: string
              description: >-
                URL patterns (anchored whole-url match, NOT substring/regex).
                `*` = wildcard within one url part; `:name` = one path segment.
                A bare `*` (i.e. `["*"]`) matches EVERY page on every host incl.
                deep paths — the canonical always-on / whole-site pattern (use
                it when content should be available everywhere). Scope it down
                instead with: `*/` (homepage only — path exactly `/`),
                `*/pricing` (one page), `*/app/*` (a section + below),
                `host.com/*` (any page on a specific host). Multiple patterns
                are OR-matched: the URL matches this list if it matches ANY one
                pattern (so "/tasks OR /dashboard" is one condition with both
                patterns here — no group needed).
            excludes:
              description: >-
                URL patterns to exclude (same syntax as includes); excludes win
                over includes.
              type: array
              items:
                type: string
          required:
            - type
            - includes
        - type: object
          properties:
            type:
              type: string
              enum:
                - element
            target:
              type: object
              properties:
                selector:
                  type: string
                  minLength: 1
                  description: >-
                    A stable CSS selector for the element. The runtime targets
                    the FIRST match — so either make the selector unique, or
                    pair a stable non-unique selector with `nth` to pick the
                    intended match. A non-unique selector with no `nth` targets
                    the first (often wrong) element and the tooltip silently
                    won't render.
                text:
                  description: >-
                    Optional refinement of `selector`. Requires the targeted
                    element's visible text to equal this (exact match, after
                    trim) — use it to pin a specific content/state (e.g. a
                    stable id whose displayed text you want to match: id +
                    text). It refines the element chosen by `selector`/`nth`; on
                    its own it does NOT search among multiple matches, so
                    disambiguate a non-unique selector with `nth`, not `text`
                    alone.
                  type: string
                nth:
                  description: >-
                    Optional refinement of `selector`. 0-based index to pick
                    which match when the selector isn't unique — e.g. a stable
                    selector matching 3 elements + `nth: 1` targets the 2nd,
                    giving a unique result. Matches are taken in document order
                    (as they appear in the page HTML). Range 0–4 — only the
                    first 5 matches are addressable; a larger value is rejected.
                  type: integer
                  minimum: 0
                  maximum: 4
              required:
                - selector
            state:
              type: string
              enum:
                - present
                - hidden
                - disabled
                - enabled
                - clicked
                - unclicked
              description: >-
                `present` means NOT CLIPPED AWAY: the element is in the DOM and
                its box lies inside the viewport / its scroll ancestors —
                scrolled off-screen or `display:none` never satisfies it (and
                `hidden` is its negation). It is NOT "the user can see something
                there": an EMPTY, zero-height placeholder node satisfies
                `present` (observed in testing: a checklist task keyed on an
                initially-empty `<p>` status line ticked itself the moment the
                checklist appeared, before the shopper did anything). So do not
                use element presence as a proxy for "the app has said
                something": most apps keep the container mounted and only fill
                in its text. Match the TEXT instead (`target.text` + `present`,
                or the negation trick: the old text `hidden`). Appearances
                shorter than about a second can be missed entirely.
                `disabled`/`enabled` read the element disabled state at
                evaluation time. **`clicked` means "clicked since page load AND
                the element is STILL in the DOM right now"** — both halves,
                re-checked every evaluation. The click memory latches (the
                listener attaches the FIRST time the condition is evaluated, so
                earlier clicks are invisible, and the memory survives a
                re-render), but the element lookup is redone each poll. Two
                consequences, one of them silent: (1) **an element that UNMOUNTS
                on click can NEVER satisfy it** — the click lands, the element
                vanishes, the lookup fails from then on and the condition stays
                false forever with no error (observed in testing: a tracker on a
                button that clears its own toolbar counted ZERO real clicks);
                (2) an element that unmounts and REMOUNTS satisfies it again, so
                a tracker gated on it fires once per remount — not once per page
                load. Unlike `present`, this lookup does NOT require viewport
                visibility: scrolling the target off-screen keeps `clicked`
                true. `unclicked` negates the same pair, so it is also false
                while the element is absent. To count a COMPLETED action,
                condition on what the app shows afterwards (a success toast, a
                state change) rather than `clicked` on the button that starts
                it.
          required:
            - type
            - state
        - type: object
          properties:
            type:
              type: string
              enum:
                - content_state
            content:
              type: string
              description: >-
                contentId of the FLOW or CHECKLIST whose per-user state to check
                (an id from the content list). Only flows and checklists record
                this state — referencing a banner / launcher / resource-center /
                tracker is rejected at write.
            state:
              type: string
              enum:
                - seen
                - unseen
                - completed
                - uncompleted
                - active
                - inactive
              description: >-
                The referenced flow/checklist's state for THIS user. seen =
                started at least once (for a flow, TRUE from the moment it
                opens; for a checklist, TRUE only once the user EXPANDS the
                panel — a `initialDisplay: "button"` checklist whose launcher is
                never clicked stays unseen forever); unseen = never started;
                active = currently open/running; inactive = NOT currently
                running (covers both never-started and ran-then-closed);
                completed = reached a goal/completion step; uncompleted = not
                completed. To gate piece B until flow A has run AND closed (the
                usual "show next thing after the welcome flow" sequencing), use
                `seen` AND `inactive` together — `seen` alone fires while A is
                still open (B piles on top), and `completed` alone strands users
                who skip/dismiss A.
          required:
            - type
            - content
            - state
        - type: object
          properties:
            type:
              type: string
              enum:
                - event
            event:
              type: string
            count:
              description: >-
                How many times the event must have occurred. Omit it for the
                common case "the event has happened" (treated as at_least 1).
                Set `op`/`n` for a threshold (`between` needs `n` and `n2`).
                `at_least`/`between` require n ≥ 1; use `at_most`/`exactly` with
                0 for "never happened".
              type: object
              properties:
                op:
                  type: string
                  enum:
                    - at_least
                    - at_most
                    - exactly
                    - between
                'n':
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                n2:
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
              required:
                - op
                - 'n'
            within:
              description: >-
                Optional time window for the event count. Omit it (or use
                `any_time`) to count over all time — "the event has ever
                happened". Any other `op` (`in_the_last` / `more_than` /
                `between`) requires BOTH `value` and `unit`, and `between` also
                `value2` — rejected at write otherwise.
              type: object
              properties:
                op:
                  type: string
                  enum:
                    - in_the_last
                    - more_than
                    - between
                    - any_time
                value:
                  type: number
                value2:
                  type: number
                unit:
                  type: string
                  enum:
                    - seconds
                    - minutes
                    - hours
                    - days
              required:
                - op
            scope:
              description: >-
                Whose event activity to count (default `current_user`).
                `current_user` = only this user's own events.
                `current_user_in_company` = this user's events, but counted
                within their currently-associated company context (needs the
                user associated to a company via `group()` / the
                company-membership API). `any_user_in_company` = events by ANY
                user in this user's company — account-level activity (e.g.
                "anyone on the account has done X"). The two company scopes
                require the user to be in a company or they never match.
              type: string
              enum:
                - current_user
                - current_user_in_company
                - any_user_in_company
            where:
              type: array
              items:
                $ref: '#/components/schemas/ThemeDto__schema1'
          required:
            - type
            - event
        - type: object
          properties:
            type:
              type: string
              enum:
                - text_input
            target:
              type: object
              properties:
                selector:
                  type: string
                  minLength: 1
                  description: >-
                    A stable CSS selector for the element. The runtime targets
                    the FIRST match — so either make the selector unique, or
                    pair a stable non-unique selector with `nth` to pick the
                    intended match. A non-unique selector with no `nth` targets
                    the first (often wrong) element and the tooltip silently
                    won't render.
                text:
                  description: >-
                    Optional refinement of `selector`. Requires the targeted
                    element's visible text to equal this (exact match, after
                    trim) — use it to pin a specific content/state (e.g. a
                    stable id whose displayed text you want to match: id +
                    text). It refines the element chosen by `selector`/`nth`; on
                    its own it does NOT search among multiple matches, so
                    disambiguate a non-unique selector with `nth`, not `text`
                    alone.
                  type: string
                nth:
                  description: >-
                    Optional refinement of `selector`. 0-based index to pick
                    which match when the selector isn't unique — e.g. a stable
                    selector matching 3 elements + `nth: 1` targets the 2nd,
                    giving a unique result. Matches are taken in document order
                    (as they appear in the page HTML). Range 0–4 — only the
                    first 5 matches are addressable; a larger value is rejected.
                  type: integer
                  minimum: 0
                  maximum: 4
              required:
                - selector
            op:
              type: string
              enum:
                - is
                - not
                - contains
                - not_contains
                - starts_with
                - ends_with
                - match
                - unmatch
                - any
                - empty
            value:
              type: string
          required:
            - type
            - op
        - type: object
          properties:
            type:
              type: string
              enum:
                - text_filled
            target:
              type: object
              properties:
                selector:
                  type: string
                  minLength: 1
                  description: >-
                    A stable CSS selector for the element. The runtime targets
                    the FIRST match — so either make the selector unique, or
                    pair a stable non-unique selector with `nth` to pick the
                    intended match. A non-unique selector with no `nth` targets
                    the first (often wrong) element and the tooltip silently
                    won't render.
                text:
                  description: >-
                    Optional refinement of `selector`. Requires the targeted
                    element's visible text to equal this (exact match, after
                    trim) — use it to pin a specific content/state (e.g. a
                    stable id whose displayed text you want to match: id +
                    text). It refines the element chosen by `selector`/`nth`; on
                    its own it does NOT search among multiple matches, so
                    disambiguate a non-unique selector with `nth`, not `text`
                    alone.
                  type: string
                nth:
                  description: >-
                    Optional refinement of `selector`. 0-based index to pick
                    which match when the selector isn't unique — e.g. a stable
                    selector matching 3 elements + `nth: 1` targets the 2nd,
                    giving a unique result. Matches are taken in document order
                    (as they appear in the page HTML). Range 0–4 — only the
                    first 5 matches are addressable; a larger value is rejected.
                  type: integer
                  minimum: 0
                  maximum: 4
              required:
                - selector
          required:
            - type
        - type: object
          properties:
            type:
              type: string
              enum:
                - time_window
            start:
              type: string
              description: >-
                Window start (ISO datetime). REQUIRED — the runtime never
                matches a window without a start, so an end-only window is
                rejected at write. For "until X" semantics, set start to any
                past instant and end to X.
            end:
              description: >-
                Window end (ISO datetime). Omit for an open-ended "from start
                onwards" window.
              type: string
          required:
            - type
            - start
        - type: object
          properties:
            type:
              type: string
              enum:
                - unsupported
            note:
              type: string
          required:
            - type
          description: >-
            Read-side placeholder for a stored condition this API cannot express
            (`note` says what it stands for — usually a DEAD condition the
            runtime never matches: a deleted attribute/event, an end-only time
            window). It cannot be written back (the placeholder carries no data
            to preserve): echoing it is rejected. Either remove it from the list
            you write — an explicit choice that DELETES the stored condition;
            mind that a never-matching node inside an AND list pins the whole
            rule to "never fires", so deleting it can bring the remaining
            conditions to life — or repair the original condition in the
            Usertour builder first.
    UpdateThemeBodyDto__schema1:
      oneOf:
        - type: object
          properties:
            type:
              type: string
              enum:
                - event_attribute
            attribute:
              type: string
            op:
              type: string
              enum:
                - is
                - not
                - contains
                - not_contains
                - starts_with
                - ends_with
                - any
                - empty
                - lt
                - lte
                - gt
                - gte
                - between
                - 'true'
                - 'false'
                - includes_any
                - includes_all
                - not_includes_any
                - not_includes_all
                - less_than
                - exactly
                - more_than
                - before
                - 'on'
                - after
            value:
              type: string
            value2:
              type: string
            values:
              type: array
              items:
                type: string
          required:
            - type
            - attribute
            - op
        - type: object
          properties:
            type:
              type: string
              enum:
                - group
            match:
              type: string
              enum:
                - all
                - any
            conditions:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/UpdateThemeBodyDto__schema1'
              description: >-
                The grouped conditions — at least one. An EMPTY group is not "no
                filter": it never matches, so next to an AND it makes the whole
                rule unmatchable, and writing one is rejected. A version saved
                with an empty group in the BUILDER still reads back with it
                (validate warns); writing that list back is refused until the
                group is filled or dropped.
          required:
            - type
            - match
            - conditions
    ThemeDto__schema1:
      oneOf:
        - type: object
          properties:
            type:
              type: string
              enum:
                - event_attribute
            attribute:
              type: string
            op:
              type: string
              enum:
                - is
                - not
                - contains
                - not_contains
                - starts_with
                - ends_with
                - any
                - empty
                - lt
                - lte
                - gt
                - gte
                - between
                - 'true'
                - 'false'
                - includes_any
                - includes_all
                - not_includes_any
                - not_includes_all
                - less_than
                - exactly
                - more_than
                - before
                - 'on'
                - after
            value:
              type: string
            value2:
              type: string
            values:
              type: array
              items:
                type: string
          required:
            - type
            - attribute
            - op
        - type: object
          properties:
            type:
              type: string
              enum:
                - group
            match:
              type: string
              enum:
                - all
                - any
            conditions:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/ThemeDto__schema1'
              description: >-
                The grouped conditions — at least one. An EMPTY group is not "no
                filter": it never matches, so next to an AND it makes the whole
                rule unmatchable, and writing one is rejected. A version saved
                with an empty group in the BUILDER still reads back with it
                (validate warns); writing that list back is refused until the
                group is filled or dropped.
          required:
            - type
            - match
            - conditions
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: utp_... personal API token (opaque)
      type: http

````