---
title: E-posta üstbilgi
description: Header for outbound website emails.
---

Aşağıdaki alan düzeyi katalog tabloları İngilizce kalır — düzenleyici, API ve MCP’nin kullandığı makine tasarım şemasıyla birebir uyumludur.

## Shared concepts

### Decoration & visibility (BlockShell)

Most blocks share one reusable shell: visibility rules and decoration live on the same prop set, not as separate block types. Blocks that use BlockShell list these fields at the end of their Fields section. Visibility controls who/where the block appears (breakpoints, locales, auth, route lock, roles). Decoration controls spacing, background, border, shadow, motion, and related chrome around the block content.

#### Fields

##### Visibility

###### `showOnBreakpoints`

Per-breakpoint visibility. Set a breakpoint to `false` to hide the block on that viewport. Missing keys default to visible.

```
showOnBreakpoints: { mobile: false }
```

###### `showOnLocales`

Limit which website locales show the block. Empty / missing means all enabled locales. Set a locale to `false` to hide.

```
showOnLocales: { tr: false }
```

###### `authVisibility`

Who can see the block based on website sign-in state.

Options: `all`, `authenticated`, `anonymous`

```
authVisibility: "authenticated"
```

###### `routeLockVisibility`

On locked object routes, show always, only when unlocked, or only when locked.

Options: `all`, `when_unlocked`, `when_locked`

```
routeLockVisibility: "all"
```

###### `roleVisibility`

Optional list of website user role labels. Empty means all roles. Matching is case-sensitive.

```
roleVisibility: ["moderator"]
```

###### `entryActionVisibility`

Object-component only: show when the current entry exposes matching actions.

Options: `all`, `canUpdate`, `canDelete`

```
entryActionVisibility: "all"
```

###### `queryPageVisibility`

Optional: limit list blocks to the first query page only.

Options: `all`, `first_page_only`

```
queryPageVisibility: "all"
```

##### Spacing & sizing

###### `customizeEnabled`

Enables the decoration controls below in the editor.

```
customizeEnabled: true
```

###### `paddingEnabled`

Turns padding controls on for this block.

```
paddingEnabled: true
```

###### `padding`

Unit: `token`

Theme spacing token applied as padding. Tokens let site owners customize spacing while blocks continue to share a consistent design language.

Options: `none`, `xs`, `sm`, `md`, `lg`, `xl`

```
padding: "md"
```

###### `paddingByBreakpoint`

Unit: `token`

Theme spacing token per breakpoint. Use this when the block needs different, but still theme-consistent, spacing at different viewport sizes.

```
paddingByBreakpoint: { desktop: "md", mobile: "sm" }
```

###### `marginsEnabled`

Turns margin controls on (configured via size/position maps).

```
marginsEnabled: false
```

###### `sizeByBreakpoint`

Optional width/height constraints per breakpoint. Modes: `fillParent` (stretch), `fitContent` (intrinsic), `static` (fixed length via `widthStatic`/`heightStatic` + unit), `ratio` (percent of the other axis via `widthRatio`/`heightRatio`).

`static` uses `widthStaticUnit` / `heightStaticUnit`: `px`, `vw`, `vh`, `vmin`, or `vmax` (default `px`). Example full-page background: `widthStatic: 100`, `widthStaticUnit: "vw"`, `heightStatic: 100`, `heightStaticUnit: "vh"` with fixed positioning and `pointerEvents: "none"`. `ratio` values are percentages of the opposite axis. `fillParent` and `fitContent` take no numeric unit.

```
sizeByBreakpoint: {
  desktop: {
    widthMode: "static",
    widthStatic: 100,
    widthStaticUnit: "vw",
    heightMode: "static",
    heightStatic: 100,
    heightStaticUnit: "vh"
  }
}
```

###### `overflow`

CSS overflow on the decoration frame.

Options: `visible`, `hidden`, `auto`, `clip`

```
overflow: "hidden"
```

###### `pointerEvents`

Whether the decoration frame receives pointer events. Use `none` for full-page decorative backgrounds so clicks pass through.

Options: `auto`, `none`

```
pointerEvents: "auto"
```

##### Position

###### `positionEnabled`

Enables absolute/relative positioning overlays.

```
positionEnabled: false
```

###### `positionByBreakpoint`

Positioning overlays per breakpoint (`static`, `relative`, `absolute`, `fixed`, `sticky`) with optional offsets in pixels (`top`, `right`, `bottom`, `left`).

```
positionByBreakpoint: {
  desktop: { position: "relative", top: 0, left: 0 }
}
```

##### Background

###### `backgroundEnabled`

Enables background fill, gradient, or image.

```
backgroundEnabled: true
```

###### `backgroundWidth`

Background span: page column or full viewport bleed.

Options: `page`, `full`

```
backgroundWidth: "page"
```

###### `backgroundKind`

Solid color, gradient, image, muted autoplay video, or canvas animation (particles / reactive grid).

Options: `solid`, `gradient`, `image`, `video`, `animation`

```
backgroundKind: "solid"
```

###### `backgroundColorLight`

Solid background color in light theme.

```
backgroundColorLight: "#ffffff"
```

###### `backgroundColorDark`

Solid background color in dark theme.

```
backgroundColorDark: "#111827"
```

###### `gradientType`

Linear, radial, or conic gradient when `backgroundKind` is `gradient`.

Options: `linear`, `radial`, `conic`

```
gradientType: "linear"
```

###### `gradientAngle`

Unit: `deg`

Linear gradient direction or conic start angle in degrees when `backgroundKind` is `gradient`.

```
gradientAngle: 135
```

###### `gradientColors`

Gradient stops with light/dark pairs and segment offsets (CSS % is the running sum).

```
gradientColors: [
  { light: "#2563eb", dark: "#1e3a8a", offset: 20 },
  { light: "#93c5fd", dark: "#1e40af", offset: 80 }
]
```

###### `backgroundImageSrc`

Background image source when `backgroundKind` is `image`.

```
backgroundImageSrc: "https://cdn.example/bg.jpg"
```

###### `backgroundImageMode`

How the background image is sized.

Options: `cover`, `contain`, `repeat`

```
backgroundImageMode: "cover"
```

###### `backgroundRepeatSize`

Unit: `px`

Tile size in pixels when background image mode is `repeat`.

```
backgroundRepeatSize: 64
```

###### `backgroundPosition`

CSS background-position value.

```
backgroundPosition: "center"
```

###### `backgroundMotionEnabled`

Seamless pan (and optional rotate) for image backgrounds.

```
backgroundMotionEnabled: true
```

###### `backgroundMotionDirectionDeg`

Unit: `deg`

Pan direction in degrees (0 = right).

```
backgroundMotionDirectionDeg: 0
```

###### `backgroundMotionSpeed`

Relative pan speed for seamless cycling.

```
backgroundMotionSpeed: 20
```

###### `backgroundMotionRotateDegPerSec`

Unit: `deg`

Continuous rotation speed in degrees per second (0 = off).

```
backgroundMotionRotateDegPerSec: 0
```

###### `backgroundVideoSrc`

Video URL when `backgroundKind` is `video`. Always muted, autoplay, plays inline; never captures focus.

```
backgroundVideoSrc: "https://cdn.example/bg.mp4"
```

###### `backgroundVideoFit`

`cover` / `fill` use object-fit; `repeat` tiles frames on canvas.

Options: `cover`, `fill`, `repeat`

```
backgroundVideoFit: "cover"
```

###### `backgroundVideoLoop`

Loop the background video (default true).

```
backgroundVideoLoop: true
```

###### `backgroundAnimationMode`

Particle field or reactive grid (filled cells or continuous outlines) when `backgroundKind` is `animation`.

Options: `particle`, `reactiveGrid`

```
backgroundAnimationMode: "particle"
```

###### `backgroundAnimShape`

Built-in shape or custom SVG for particles/grid cells.

Options: `circle`, `square`, `roundedSquare`, `triangle`, `diamond`, `hexagon`, `star`, `cross`, `svg`

```
backgroundAnimShape: "circle"
```

###### `backgroundAnimSvgSrc`

SVG URL when shape is `svg`.

```
backgroundAnimSvgSrc: "https://cdn.example/shape.svg"
```

###### `backgroundAnimColorMode`

`solid` tints shapes; `fromAsset` keeps SVG colors.

Options: `solid`, `fromAsset`

```
backgroundAnimColorMode: "solid"
```

###### `backgroundAnimSize`

Unit: `px`

Base particle or cell size in pixels.

```
backgroundAnimSize: 12
```

###### `backgroundAnimJitter`

Particle-only 0–1 randomization for count, size, lifetime, and speed.

```
backgroundAnimJitter: 0.2
```

###### `backgroundGridStyle`

Reactive grid rendering: filled `cells`, or `continuous` shape outlines tiled edge-to-edge into one connected lattice that ripples around the cursor. Ignored for `svg` shapes, which always render as cells.

Options: `cells`, `continuous`

```
backgroundGridStyle: "cells"
```

###### `backgroundGridHoverGrowLimitPct`

Unit: `%`

Maximum cell size change at the pointer. Positive values grow cells; negative values shrink them. A value of `50` reaches 150% scale after the configured reaction time.

```
backgroundGridHoverGrowLimitPct: 50
```

###### `backgroundGridHoverRotateLimitDeg`

Unit: `deg`

Maximum cell rotation at the pointer. Positive values rotate clockwise; negative values rotate counterclockwise.

```
backgroundGridHoverRotateLimitDeg: 0
```

###### `backgroundGridReactionTimeSec`

Unit: `s`

Seconds for cells or the continuous-grid ripple to reach their configured hover limit, and to return after the pointer leaves.

```
backgroundGridReactionTimeSec: 1
```

##### Border

###### `borderEnabled`

Enables border color, style, width, and radius.

```
borderEnabled: false
```

###### `borderColorLight`

Border color in light theme.

```
borderColorLight: "#e5e7eb"
```

###### `borderColorDark`

Border color in dark theme.

```
borderColorDark: "#374151"
```

###### `borderStyle`

CSS border style.

Options: `solid`, `dashed`, `dotted`

```
borderStyle: "solid"
```

###### `borderWidth`

Unit: `token`

Border width token.

Options: `none`, `sm`, `md`, `lg`

```
borderWidth: "sm"
```

###### `borderRadius`

Unit: `token`

Border radius token.

Options: `none`, `sm`, `md`, `lg`, `xl`, `full`

```
borderRadius: "md"
```

##### Shadow

###### `shadowEnabled`

Enables box shadow values for light/dark themes.

```
shadowEnabled: false
```

###### `shadowValueLight`

CSS box-shadow value in light theme.

```
shadowValueLight: "0 8px 24px rgba(0, 0, 0, 0.12)"
```

###### `shadowValueDark`

CSS box-shadow value in dark theme.

```
shadowValueDark: "0 8px 24px rgba(0, 0, 0, 0.45)"
```

##### Motion & transform

###### `scrollAnimationEnabled`

Enables enter-on-scroll animation.

```
scrollAnimationEnabled: false
```

###### `scrollAnimationType`

Enter-on-scroll animation preset.

Options: `fadeIn`, `slideInBottom`, `slideInTop`, `slideInLeft`, `slideInRight`, `zoomIn`, `zoomOut`, `rotateIn`, `rotateOut`, `bounceIn`, `bounceOut`, `pulse`

```
scrollAnimationType: "fadeIn"
```

###### `scrollAnimationDuration`

Unit: `ms`

Animation duration in milliseconds.

```
scrollAnimationDuration: 600
```

###### `scrollAnimationDelay`

Unit: `ms`

Animation delay in milliseconds.

```
scrollAnimationDelay: 0
```

###### `cursorTiltEnabled`

Tilts the block slightly toward the pointer.

```
cursorTiltEnabled: false
```

###### `cursorTiltIntensity`

Strength of the cursor tilt effect.

```
cursorTiltIntensity: 8
```

###### `transformEnabled`

Enables CSS transform controls.

```
transformEnabled: false
```

###### `transformRotateX`

Unit: `deg`

Rotation around the X axis in degrees.

```
transformRotateX: 0
```

###### `transformRotateY`

Unit: `deg`

Rotation around the Y axis in degrees.

```
transformRotateY: 0
```

###### `transformRotateZ`

Unit: `deg`

Rotation around the Z axis in degrees.

```
transformRotateZ: 0
```

###### `transformTranslateX`

Unit: `px`

Horizontal translation in pixels.

```
transformTranslateX: 0
```

###### `transformTranslateY`

Unit: `px`

Vertical translation in pixels.

```
transformTranslateY: 0
```

###### `transformTranslateZ`

Unit: `px`

Depth translation in pixels.

```
transformTranslateZ: 0
```

###### `transformScale`

Unit: `ratio`

Uniform scale factor (unitless).

```
transformScale: 1
```

###### `transformPerspective`

Unit: `px`

CSS perspective distance in pixels.

```
transformPerspective: 800
```

##### Advanced

###### `decorationBySelector`

Advanced: apply decoration token overlays for `hover`, `active`, and `focus`. Missing overlay keys inherit the default flat props.

```
decorationBySelector: {
  hover: { backgroundColorLight: "#f3f4f6" }
}
```

###### `clipboard`

_Editor-only control — does not persist its own value._

Editor-only copy/paste helpers for block props.

```
// Editor-only — does not persist a stored value
```

#### Examples

**Hide on mobile**

```json
{
  "showOnBreakpoints": {
    "mobile": false
  }
}
```

**Signed-in only + light padding**

```json
{
  "authVisibility": "authenticated",
  "customizeEnabled": true,
  "paddingEnabled": true,
  "padding": "md"
}
```

### Rich text

## Storage
Rich text props are TipTap HTML **strings**, not slots and not a separate `html` key.
Example: `content: "<p>Hello <strong>world</strong></p>"`.
Empty content is typically an empty string or a minimal empty paragraph from the editor.

## Editor features
The shared TipTap stack (admin Puck + public forms) includes:
- Headings levels 1–6
- Bold, italic, strike, and related StarterKit marks/nodes (paragraphs, lists, blockquotes, hard breaks)
- Links (insert/edit/remove via the toolbar modal)
- Text color, font family, and font size (px) — inline spans, so any selection can differ
- Tables (insert/add/remove rows and columns)
- Images from the file library (base64 embeds are not allowed)
- YouTube embeds and Google Maps embeds
Some surfaces (e.g. lifecycle email bodies) add extra extensions such as field-binding chips; those only appear where that editor enables them.

## Public render
Published HTML is rendered with the shared `.rich-text` styles (and related puck rich-text CSS) so headings, lists, tables, and embeds match the editor.
Theme typography and colors still come from the website theme where CSS variables apply.

## Where rich text appears
- **RichTextBlock** — `content` HTML body on pages and chrome
- **ButtonBlock** / **ButtonLink** — `text` label as HTML (often a short paragraph)
- **ObjectBoundRichText** — binds an object schema `richText` field into the page
- Object schema type `richText` and admin/public **SharedRichTextField** forms use the same extension stack

## Authoring & MCP guidance
- Keep first-viewport copy short; put long articles in object fields and bind them with ObjectBoundRichText.
- Always write the HTML into the documented prop (`content`, `text`, or `overlay`) — do not invent an `html` prop.
- Locale overlays localize these HTML strings like other localizable props; the modal Name field is not rich text and is not localized.
- Prefer semantic HTML TipTap already emits (`<p>`, `<h2>`, `<ul>`, `<a href="…">`, tables) over hand-authored markup that the schema does not round-trip.
- When documenting or generating JSON, treat the value as a string of HTML, never as a nested slot array.

#### Examples

**Short paragraph**

```json
{
  "content": "<p>Browse categories and start a conversation.</p>"
}
```

**Heading + list**

```json
{
  "content": "<h2>What you get</h2><ul><li>Fast setup</li><li>Multi-locale publishing</li></ul>"
}
```

## Categories

### Layout

- `DecorationBlock`
- `RowBlock`
- `GridBlock`
- `VerticalSpacer`
- `EmailDivider`

### Content

- `HeadingBlock`
- `RichTextBlock`
- `ButtonBlock`

### Media

- `SingleImage`

## Blocks

### `DecorationBlock`

Decoration

#### Fields

##### Content

###### `content`

Main content payload. Shape depends on the block: nested slot blocks, rich-text HTML, or body copy.

```
content: []
```

##### Visibility

###### `showOnBreakpoints`

Per-breakpoint visibility. Set a breakpoint to `false` to hide the block on that viewport. Missing keys default to visible.

```
showOnBreakpoints: { mobile: false }
```

###### `showOnLocales`

Limit which website locales show the block. Empty / missing means all enabled locales. Set a locale to `false` to hide.

```
showOnLocales: { tr: false }
```

###### `authVisibility`

Who can see the block based on website sign-in state.

Options: `all`, `authenticated`, `anonymous`

```
authVisibility: "authenticated"
```

###### `routeLockVisibility`

On locked object routes, show always, only when unlocked, or only when locked.

Options: `all`, `when_unlocked`, `when_locked`

```
routeLockVisibility: "all"
```

###### `roleVisibility`

Optional list of website user role labels. Empty means all roles. Matching is case-sensitive.

```
roleVisibility: ["moderator"]
```

###### `entryActionVisibility`

Object-component only: show when the current entry exposes matching actions.

Options: `all`, `canUpdate`, `canDelete`

```
entryActionVisibility: "all"
```

###### `queryPageVisibility`

Optional: limit list blocks to the first query page only.

Options: `all`, `first_page_only`

```
queryPageVisibility: "all"
```

##### Spacing & sizing

###### `customizeEnabled`

Enables the decoration controls below in the editor.

```
customizeEnabled: true
```

###### `paddingEnabled`

Turns padding controls on for this block.

```
paddingEnabled: true
```

###### `padding`

Unit: `token`

Theme spacing token applied as padding. Tokens let site owners customize spacing while blocks continue to share a consistent design language.

Options: `none`, `xs`, `sm`, `md`, `lg`, `xl`

```
padding: "md"
```

###### `paddingByBreakpoint`

Unit: `token`

Theme spacing token per breakpoint. Use this when the block needs different, but still theme-consistent, spacing at different viewport sizes.

```
paddingByBreakpoint: { desktop: "md", mobile: "sm" }
```

###### `marginsEnabled`

Turns margin controls on (configured via size/position maps).

```
marginsEnabled: false
```

###### `sizeByBreakpoint`

Optional width/height constraints per breakpoint. Modes: `fillParent` (stretch), `fitContent` (intrinsic), `static` (fixed length via `widthStatic`/`heightStatic` + unit), `ratio` (percent of the other axis via `widthRatio`/`heightRatio`).

`static` uses `widthStaticUnit` / `heightStaticUnit`: `px`, `vw`, `vh`, `vmin`, or `vmax` (default `px`). Example full-page background: `widthStatic: 100`, `widthStaticUnit: "vw"`, `heightStatic: 100`, `heightStaticUnit: "vh"` with fixed positioning and `pointerEvents: "none"`. `ratio` values are percentages of the opposite axis. `fillParent` and `fitContent` take no numeric unit.

```
sizeByBreakpoint: {
  desktop: {
    widthMode: "static",
    widthStatic: 100,
    widthStaticUnit: "vw",
    heightMode: "static",
    heightStatic: 100,
    heightStaticUnit: "vh"
  }
}
```

###### `overflow`

CSS overflow on the decoration frame.

Options: `visible`, `hidden`, `auto`, `clip`

```
overflow: "hidden"
```

###### `pointerEvents`

Whether the decoration frame receives pointer events. Use `none` for full-page decorative backgrounds so clicks pass through.

Options: `auto`, `none`

```
pointerEvents: "auto"
```

##### Position

###### `positionEnabled`

Enables absolute/relative positioning overlays.

```
positionEnabled: false
```

###### `positionByBreakpoint`

Positioning overlays per breakpoint (`static`, `relative`, `absolute`, `fixed`, `sticky`) with optional offsets in pixels (`top`, `right`, `bottom`, `left`).

```
positionByBreakpoint: {
  desktop: { position: "relative", top: 0, left: 0 }
}
```

##### Background

###### `backgroundEnabled`

Enables background fill, gradient, or image.

```
backgroundEnabled: true
```

###### `backgroundWidth`

Background span: page column or full viewport bleed.

Options: `page`, `full`

```
backgroundWidth: "page"
```

###### `backgroundKind`

Solid color, gradient, image, muted autoplay video, or canvas animation (particles / reactive grid).

Options: `solid`, `gradient`, `image`, `video`, `animation`

```
backgroundKind: "solid"
```

###### `backgroundColorLight`

Solid background color in light theme.

```
backgroundColorLight: "#ffffff"
```

###### `backgroundColorDark`

Solid background color in dark theme.

```
backgroundColorDark: "#111827"
```

###### `gradientType`

Linear, radial, or conic gradient when `backgroundKind` is `gradient`.

Options: `linear`, `radial`, `conic`

```
gradientType: "linear"
```

###### `gradientAngle`

Unit: `deg`

Linear gradient direction or conic start angle in degrees when `backgroundKind` is `gradient`.

```
gradientAngle: 135
```

###### `gradientColors`

Gradient stops with light/dark pairs and segment offsets (CSS % is the running sum).

```
gradientColors: [
  { light: "#2563eb", dark: "#1e3a8a", offset: 20 },
  { light: "#93c5fd", dark: "#1e40af", offset: 80 }
]
```

###### `backgroundImageSrc`

Background image source when `backgroundKind` is `image`.

```
backgroundImageSrc: "https://cdn.example/bg.jpg"
```

###### `backgroundImageMode`

How the background image is sized.

Options: `cover`, `contain`, `repeat`

```
backgroundImageMode: "cover"
```

###### `backgroundRepeatSize`

Unit: `px`

Tile size in pixels when background image mode is `repeat`.

```
backgroundRepeatSize: 64
```

###### `backgroundPosition`

CSS background-position value.

```
backgroundPosition: "center"
```

###### `backgroundMotionEnabled`

Seamless pan (and optional rotate) for image backgrounds.

```
backgroundMotionEnabled: true
```

###### `backgroundMotionDirectionDeg`

Unit: `deg`

Pan direction in degrees (0 = right).

```
backgroundMotionDirectionDeg: 0
```

###### `backgroundMotionSpeed`

Relative pan speed for seamless cycling.

```
backgroundMotionSpeed: 20
```

###### `backgroundMotionRotateDegPerSec`

Unit: `deg`

Continuous rotation speed in degrees per second (0 = off).

```
backgroundMotionRotateDegPerSec: 0
```

###### `backgroundVideoSrc`

Video URL when `backgroundKind` is `video`. Always muted, autoplay, plays inline; never captures focus.

```
backgroundVideoSrc: "https://cdn.example/bg.mp4"
```

###### `backgroundVideoFit`

`cover` / `fill` use object-fit; `repeat` tiles frames on canvas.

Options: `cover`, `fill`, `repeat`

```
backgroundVideoFit: "cover"
```

###### `backgroundVideoLoop`

Loop the background video (default true).

```
backgroundVideoLoop: true
```

###### `backgroundAnimationMode`

Particle field or reactive grid (filled cells or continuous outlines) when `backgroundKind` is `animation`.

Options: `particle`, `reactiveGrid`

```
backgroundAnimationMode: "particle"
```

###### `backgroundAnimShape`

Built-in shape or custom SVG for particles/grid cells.

Options: `circle`, `square`, `roundedSquare`, `triangle`, `diamond`, `hexagon`, `star`, `cross`, `svg`

```
backgroundAnimShape: "circle"
```

###### `backgroundAnimSvgSrc`

SVG URL when shape is `svg`.

```
backgroundAnimSvgSrc: "https://cdn.example/shape.svg"
```

###### `backgroundAnimColorMode`

`solid` tints shapes; `fromAsset` keeps SVG colors.

Options: `solid`, `fromAsset`

```
backgroundAnimColorMode: "solid"
```

###### `backgroundAnimSize`

Unit: `px`

Base particle or cell size in pixels.

```
backgroundAnimSize: 12
```

###### `backgroundAnimJitter`

Particle-only 0–1 randomization for count, size, lifetime, and speed.

```
backgroundAnimJitter: 0.2
```

###### `backgroundGridStyle`

Reactive grid rendering: filled `cells`, or `continuous` shape outlines tiled edge-to-edge into one connected lattice that ripples around the cursor. Ignored for `svg` shapes, which always render as cells.

Options: `cells`, `continuous`

```
backgroundGridStyle: "cells"
```

###### `backgroundGridHoverGrowLimitPct`

Unit: `%`

Maximum cell size change at the pointer. Positive values grow cells; negative values shrink them. A value of `50` reaches 150% scale after the configured reaction time.

```
backgroundGridHoverGrowLimitPct: 50
```

###### `backgroundGridHoverRotateLimitDeg`

Unit: `deg`

Maximum cell rotation at the pointer. Positive values rotate clockwise; negative values rotate counterclockwise.

```
backgroundGridHoverRotateLimitDeg: 0
```

###### `backgroundGridReactionTimeSec`

Unit: `s`

Seconds for cells or the continuous-grid ripple to reach their configured hover limit, and to return after the pointer leaves.

```
backgroundGridReactionTimeSec: 1
```

##### Border

###### `borderEnabled`

Enables border color, style, width, and radius.

```
borderEnabled: false
```

###### `borderColorLight`

Border color in light theme.

```
borderColorLight: "#e5e7eb"
```

###### `borderColorDark`

Border color in dark theme.

```
borderColorDark: "#374151"
```

###### `borderStyle`

CSS border style.

Options: `solid`, `dashed`, `dotted`

```
borderStyle: "solid"
```

###### `borderWidth`

Unit: `token`

Border width token.

Options: `none`, `sm`, `md`, `lg`

```
borderWidth: "sm"
```

###### `borderRadius`

Unit: `token`

Border radius token.

Options: `none`, `sm`, `md`, `lg`, `xl`, `full`

```
borderRadius: "md"
```

##### Shadow

###### `shadowEnabled`

Enables box shadow values for light/dark themes.

```
shadowEnabled: false
```

###### `shadowValueLight`

CSS box-shadow value in light theme.

```
shadowValueLight: "0 8px 24px rgba(0, 0, 0, 0.12)"
```

###### `shadowValueDark`

CSS box-shadow value in dark theme.

```
shadowValueDark: "0 8px 24px rgba(0, 0, 0, 0.45)"
```

##### Motion & transform

###### `scrollAnimationEnabled`

Enables enter-on-scroll animation.

```
scrollAnimationEnabled: false
```

###### `scrollAnimationType`

Enter-on-scroll animation preset.

Options: `fadeIn`, `slideInBottom`, `slideInTop`, `slideInLeft`, `slideInRight`, `zoomIn`, `zoomOut`, `rotateIn`, `rotateOut`, `bounceIn`, `bounceOut`, `pulse`

```
scrollAnimationType: "fadeIn"
```

###### `scrollAnimationDuration`

Unit: `ms`

Animation duration in milliseconds.

```
scrollAnimationDuration: 600
```

###### `scrollAnimationDelay`

Unit: `ms`

Animation delay in milliseconds.

```
scrollAnimationDelay: 0
```

###### `cursorTiltEnabled`

Tilts the block slightly toward the pointer.

```
cursorTiltEnabled: false
```

###### `cursorTiltIntensity`

Strength of the cursor tilt effect.

```
cursorTiltIntensity: 8
```

###### `transformEnabled`

Enables CSS transform controls.

```
transformEnabled: false
```

###### `transformRotateX`

Unit: `deg`

Rotation around the X axis in degrees.

```
transformRotateX: 0
```

###### `transformRotateY`

Unit: `deg`

Rotation around the Y axis in degrees.

```
transformRotateY: 0
```

###### `transformRotateZ`

Unit: `deg`

Rotation around the Z axis in degrees.

```
transformRotateZ: 0
```

###### `transformTranslateX`

Unit: `px`

Horizontal translation in pixels.

```
transformTranslateX: 0
```

###### `transformTranslateY`

Unit: `px`

Vertical translation in pixels.

```
transformTranslateY: 0
```

###### `transformTranslateZ`

Unit: `px`

Depth translation in pixels.

```
transformTranslateZ: 0
```

###### `transformScale`

Unit: `ratio`

Uniform scale factor (unitless).

```
transformScale: 1
```

###### `transformPerspective`

Unit: `px`

CSS perspective distance in pixels.

```
transformPerspective: 800
```

##### Advanced

###### `decorationBySelector`

Advanced: apply decoration token overlays for `hover`, `active`, and `focus`. Missing overlay keys inherit the default flat props.

```
decorationBySelector: {
  hover: { backgroundColorLight: "#f3f4f6" }
}
```

###### `clipboard`

_Editor-only control — does not persist its own value._

Editor-only copy/paste helpers for block props.

```
// Editor-only — does not persist a stored value
```

<details><summary>Default props</summary>

```json
{
  "showOnBreakpoints": {},
  "showOnLocales": {},
  "authVisibility": "all",
  "routeLockVisibility": "all",
  "roleVisibility": [],
  "entryActionVisibility": "all",
  "queryPageVisibility": "all",
  "padding": "md",
  "paddingEnabled": true,
  "sizeByBreakpoint": {},
  "marginsEnabled": false,
  "positionEnabled": false,
  "positionByBreakpoint": {},
  "backgroundEnabled": true,
  "backgroundWidth": "page",
  "backgroundKind": "solid",
  "backgroundColorLight": "#ffffff",
  "backgroundColorDark": "#1f2937",
  "gradientAngle": 180,
  "gradientType": "linear",
  "gradientColors": [
    {
      "light": "",
      "dark": "",
      "offset": 50
    },
    {
      "light": "",
      "dark": "",
      "offset": 50
    }
  ],
  "gradientColor1Light": "",
  "gradientColor1Dark": "",
  "gradientColor2Light": "",
  "gradientColor2Dark": "",
  "backgroundImageSrc": "",
  "backgroundImageMode": "cover",
  "backgroundRepeatSize": 100,
  "backgroundPosition": "center",
  "backgroundMotionEnabled": false,
  "backgroundMotionDirectionDeg": 0,
  "backgroundMotionSpeed": 20,
  "backgroundMotionRotateDegPerSec": 0,
  "backgroundVideoSrc": "",
  "backgroundVideoFit": "cover",
  "backgroundVideoLoop": true,
  "backgroundVideoRepeatSize": 100,
  "backgroundAnimationMode": "particle",
  "backgroundAnimShape": "circle",
  "backgroundAnimSvgSrc": "",
  "backgroundAnimColorMode": "solid",
  "backgroundAnimColorLight": "#ffffff88",
  "backgroundAnimColorDark": "#ffffff66",
  "backgroundAnimSize": 12,
  "backgroundAnimJitter": 0.2,
  "backgroundParticleCount": 40,
  "backgroundParticleLifetimeSec": 4,
  "backgroundParticleSpeed": 40,
  "backgroundParticleAnimType": "fade",
  "backgroundParticleFromSide": "left",
  "backgroundParticleToSide": "right",
  "backgroundGridStyle": "cells",
  "backgroundGridMotionDirectionDeg": 0,
  "backgroundGridMotionSpeed": 0,
  "backgroundGridRotateDegPerSec": 0,
  "backgroundGridHoverGrowLimitPct": 50,
  "backgroundGridHoverRotateLimitDeg": 0,
  "backgroundGridReactionTimeSec": 1,
  "backgroundGridHoverGrow": true,
  "backgroundGridHoverRotate": false,
  "backgroundGridHoverColor": false,
  "backgroundGridHoverColorLight": "#ffffff55",
  "backgroundGridHoverColorDark": "#ffffff33",
  "backgroundGridReactionSpeed": 1,
  "pointerEvents": "auto",
  "borderEnabled": true,
  "borderStyle": "solid",
  "borderColorLight": "#e5e7eb",
  "borderColorDark": "rgba(255, 255, 255, 0.1)",
  "borderWidth": "sm",
  "borderRadius": "md",
  "shadowEnabled": true,
  "shadowValueLight": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
  "shadowValueDark": "0 4px 6px -1px rgb(0 0 0 / 0.4)",
  "scrollAnimationEnabled": false,
  "scrollAnimationType": "fadeIn",
  "scrollAnimationDuration": 600,
  "scrollAnimationDelay": 0,
  "cursorTiltEnabled": false,
  "cursorTiltIntensity": 12,
  "transformEnabled": false,
  "transformRotateX": 0,
  "transformRotateY": 0,
  "transformRotateZ": 0,
  "transformTranslateX": 0,
  "transformTranslateY": 0,
  "transformTranslateZ": 0,
  "transformScale": 1,
  "decorationBySelector": {}
}
```

</details>

### `RowBlock`

List

> Horizontal flex row of columns. Each column has sizing (`fill` / `auto` / `width`) and nested content. Use for toolbars and split layouts—not as a substitute for GridBlock galleries.

#### Examples

**Title + action**

```json
{
  "gap": 12,
  "alignItems": "center",
  "justifyContent": "space-between",
  "columns": [
    {
      "sizing": "fill",
      "content": []
    },
    {
      "sizing": "auto",
      "content": []
    }
  ]
}
```

#### Fields

##### Layout

###### `columnsEditor`

_Editor-only control — does not persist its own value._

Visual editor for row columns. Does not persist its own value — writes `columns`.

```
// Writes:
columns: [
  { sizing: "fill", content: [] },
  { sizing: "width", width: 33, content: [] },
  { sizing: "auto", content: [] }
]
```

###### `columns`

Array of columns: each has `sizing` (`fill` | `auto` | `width`) and `content` (nested blocks).

`fill` grows like flex (no unit). `auto` sizes to content. `width` uses `width` / `widthByBreakpoint` as a percent of the row.

```
columns: [
  { sizing: "fill", content: [] },
  { sizing: "width", width: 40, widthByBreakpoint: { desktop: 40 }, content: [] },
  { sizing: "auto", content: [] }
]
```

###### `gap`

Unit: `px`

Gap between columns in pixels.

###### `listLayout`

How list items are arranged.

```
listLayout: "grid"
```

##### Visibility

###### `showOnBreakpoints`

Per-breakpoint visibility. Set a breakpoint to `false` to hide the block on that viewport. Missing keys default to visible.

```
showOnBreakpoints: { mobile: false }
```

###### `showOnLocales`

Limit which website locales show the block. Empty / missing means all enabled locales. Set a locale to `false` to hide.

```
showOnLocales: { tr: false }
```

###### `authVisibility`

Who can see the block based on website sign-in state.

Options: `all`, `authenticated`, `anonymous`

```
authVisibility: "authenticated"
```

###### `routeLockVisibility`

On locked object routes, show always, only when unlocked, or only when locked.

Options: `all`, `when_unlocked`, `when_locked`

```
routeLockVisibility: "all"
```

###### `roleVisibility`

Optional list of website user role labels. Empty means all roles. Matching is case-sensitive.

```
roleVisibility: ["moderator"]
```

###### `entryActionVisibility`

Object-component only: show when the current entry exposes matching actions.

Options: `all`, `canUpdate`, `canDelete`

```
entryActionVisibility: "all"
```

###### `queryPageVisibility`

Optional: limit list blocks to the first query page only.

Options: `all`, `first_page_only`

```
queryPageVisibility: "all"
```

##### Spacing & sizing

###### `customizeEnabled`

Enables the decoration controls below in the editor.

```
customizeEnabled: true
```

###### `paddingEnabled`

Turns padding controls on for this block.

```
paddingEnabled: true
```

###### `padding`

Unit: `token`

Theme spacing token applied as padding. Tokens let site owners customize spacing while blocks continue to share a consistent design language.

Options: `none`, `xs`, `sm`, `md`, `lg`, `xl`

```
padding: "md"
```

###### `paddingByBreakpoint`

Unit: `token`

Theme spacing token per breakpoint. Use this when the block needs different, but still theme-consistent, spacing at different viewport sizes.

```
paddingByBreakpoint: { desktop: "md", mobile: "sm" }
```

###### `marginsEnabled`

Turns margin controls on (configured via size/position maps).

```
marginsEnabled: false
```

###### `sizeByBreakpoint`

Optional width/height constraints per breakpoint. Modes: `fillParent` (stretch), `fitContent` (intrinsic), `static` (fixed length via `widthStatic`/`heightStatic` + unit), `ratio` (percent of the other axis via `widthRatio`/`heightRatio`).

`static` uses `widthStaticUnit` / `heightStaticUnit`: `px`, `vw`, `vh`, `vmin`, or `vmax` (default `px`). Example full-page background: `widthStatic: 100`, `widthStaticUnit: "vw"`, `heightStatic: 100`, `heightStaticUnit: "vh"` with fixed positioning and `pointerEvents: "none"`. `ratio` values are percentages of the opposite axis. `fillParent` and `fitContent` take no numeric unit.

```
sizeByBreakpoint: {
  desktop: {
    widthMode: "static",
    widthStatic: 100,
    widthStaticUnit: "vw",
    heightMode: "static",
    heightStatic: 100,
    heightStaticUnit: "vh"
  }
}
```

###### `overflow`

CSS overflow on the decoration frame.

Options: `visible`, `hidden`, `auto`, `clip`

```
overflow: "hidden"
```

###### `pointerEvents`

Whether the decoration frame receives pointer events. Use `none` for full-page decorative backgrounds so clicks pass through.

Options: `auto`, `none`

```
pointerEvents: "auto"
```

##### Position

###### `positionEnabled`

Enables absolute/relative positioning overlays.

```
positionEnabled: false
```

###### `positionByBreakpoint`

Positioning overlays per breakpoint (`static`, `relative`, `absolute`, `fixed`, `sticky`) with optional offsets in pixels (`top`, `right`, `bottom`, `left`).

```
positionByBreakpoint: {
  desktop: { position: "relative", top: 0, left: 0 }
}
```

##### Background

###### `backgroundEnabled`

Enables background fill, gradient, or image.

```
backgroundEnabled: true
```

###### `backgroundWidth`

Background span: page column or full viewport bleed.

Options: `page`, `full`

```
backgroundWidth: "page"
```

###### `backgroundKind`

Solid color, gradient, image, muted autoplay video, or canvas animation (particles / reactive grid).

Options: `solid`, `gradient`, `image`, `video`, `animation`

```
backgroundKind: "solid"
```

###### `backgroundColorLight`

Solid background color in light theme.

```
backgroundColorLight: "#ffffff"
```

###### `backgroundColorDark`

Solid background color in dark theme.

```
backgroundColorDark: "#111827"
```

###### `gradientType`

Linear, radial, or conic gradient when `backgroundKind` is `gradient`.

Options: `linear`, `radial`, `conic`

```
gradientType: "linear"
```

###### `gradientAngle`

Unit: `deg`

Linear gradient direction or conic start angle in degrees when `backgroundKind` is `gradient`.

```
gradientAngle: 135
```

###### `gradientColors`

Gradient stops with light/dark pairs and segment offsets (CSS % is the running sum).

```
gradientColors: [
  { light: "#2563eb", dark: "#1e3a8a", offset: 20 },
  { light: "#93c5fd", dark: "#1e40af", offset: 80 }
]
```

###### `backgroundImageSrc`

Background image source when `backgroundKind` is `image`.

```
backgroundImageSrc: "https://cdn.example/bg.jpg"
```

###### `backgroundImageMode`

How the background image is sized.

Options: `cover`, `contain`, `repeat`

```
backgroundImageMode: "cover"
```

###### `backgroundRepeatSize`

Unit: `px`

Tile size in pixels when background image mode is `repeat`.

```
backgroundRepeatSize: 64
```

###### `backgroundPosition`

CSS background-position value.

```
backgroundPosition: "center"
```

###### `backgroundMotionEnabled`

Seamless pan (and optional rotate) for image backgrounds.

```
backgroundMotionEnabled: true
```

###### `backgroundMotionDirectionDeg`

Unit: `deg`

Pan direction in degrees (0 = right).

```
backgroundMotionDirectionDeg: 0
```

###### `backgroundMotionSpeed`

Relative pan speed for seamless cycling.

```
backgroundMotionSpeed: 20
```

###### `backgroundMotionRotateDegPerSec`

Unit: `deg`

Continuous rotation speed in degrees per second (0 = off).

```
backgroundMotionRotateDegPerSec: 0
```

###### `backgroundVideoSrc`

Video URL when `backgroundKind` is `video`. Always muted, autoplay, plays inline; never captures focus.

```
backgroundVideoSrc: "https://cdn.example/bg.mp4"
```

###### `backgroundVideoFit`

`cover` / `fill` use object-fit; `repeat` tiles frames on canvas.

Options: `cover`, `fill`, `repeat`

```
backgroundVideoFit: "cover"
```

###### `backgroundVideoLoop`

Loop the background video (default true).

```
backgroundVideoLoop: true
```

###### `backgroundAnimationMode`

Particle field or reactive grid (filled cells or continuous outlines) when `backgroundKind` is `animation`.

Options: `particle`, `reactiveGrid`

```
backgroundAnimationMode: "particle"
```

###### `backgroundAnimShape`

Built-in shape or custom SVG for particles/grid cells.

Options: `circle`, `square`, `roundedSquare`, `triangle`, `diamond`, `hexagon`, `star`, `cross`, `svg`

```
backgroundAnimShape: "circle"
```

###### `backgroundAnimSvgSrc`

SVG URL when shape is `svg`.

```
backgroundAnimSvgSrc: "https://cdn.example/shape.svg"
```

###### `backgroundAnimColorMode`

`solid` tints shapes; `fromAsset` keeps SVG colors.

Options: `solid`, `fromAsset`

```
backgroundAnimColorMode: "solid"
```

###### `backgroundAnimSize`

Unit: `px`

Base particle or cell size in pixels.

```
backgroundAnimSize: 12
```

###### `backgroundAnimJitter`

Particle-only 0–1 randomization for count, size, lifetime, and speed.

```
backgroundAnimJitter: 0.2
```

###### `backgroundGridStyle`

Reactive grid rendering: filled `cells`, or `continuous` shape outlines tiled edge-to-edge into one connected lattice that ripples around the cursor. Ignored for `svg` shapes, which always render as cells.

Options: `cells`, `continuous`

```
backgroundGridStyle: "cells"
```

###### `backgroundGridHoverGrowLimitPct`

Unit: `%`

Maximum cell size change at the pointer. Positive values grow cells; negative values shrink them. A value of `50` reaches 150% scale after the configured reaction time.

```
backgroundGridHoverGrowLimitPct: 50
```

###### `backgroundGridHoverRotateLimitDeg`

Unit: `deg`

Maximum cell rotation at the pointer. Positive values rotate clockwise; negative values rotate counterclockwise.

```
backgroundGridHoverRotateLimitDeg: 0
```

###### `backgroundGridReactionTimeSec`

Unit: `s`

Seconds for cells or the continuous-grid ripple to reach their configured hover limit, and to return after the pointer leaves.

```
backgroundGridReactionTimeSec: 1
```

##### Border

###### `borderEnabled`

Enables border color, style, width, and radius.

```
borderEnabled: false
```

###### `borderColorLight`

Border color in light theme.

```
borderColorLight: "#e5e7eb"
```

###### `borderColorDark`

Border color in dark theme.

```
borderColorDark: "#374151"
```

###### `borderStyle`

CSS border style.

Options: `solid`, `dashed`, `dotted`

```
borderStyle: "solid"
```

###### `borderWidth`

Unit: `token`

Border width token.

Options: `none`, `sm`, `md`, `lg`

```
borderWidth: "sm"
```

###### `borderRadius`

Unit: `token`

Border radius token.

Options: `none`, `sm`, `md`, `lg`, `xl`, `full`

```
borderRadius: "md"
```

##### Shadow

###### `shadowEnabled`

Enables box shadow values for light/dark themes.

```
shadowEnabled: false
```

###### `shadowValueLight`

CSS box-shadow value in light theme.

```
shadowValueLight: "0 8px 24px rgba(0, 0, 0, 0.12)"
```

###### `shadowValueDark`

CSS box-shadow value in dark theme.

```
shadowValueDark: "0 8px 24px rgba(0, 0, 0, 0.45)"
```

##### Motion & transform

###### `scrollAnimationEnabled`

Enables enter-on-scroll animation.

```
scrollAnimationEnabled: false
```

###### `scrollAnimationType`

Enter-on-scroll animation preset.

Options: `fadeIn`, `slideInBottom`, `slideInTop`, `slideInLeft`, `slideInRight`, `zoomIn`, `zoomOut`, `rotateIn`, `rotateOut`, `bounceIn`, `bounceOut`, `pulse`

```
scrollAnimationType: "fadeIn"
```

###### `scrollAnimationDuration`

Unit: `ms`

Animation duration in milliseconds.

```
scrollAnimationDuration: 600
```

###### `scrollAnimationDelay`

Unit: `ms`

Animation delay in milliseconds.

```
scrollAnimationDelay: 0
```

###### `cursorTiltEnabled`

Tilts the block slightly toward the pointer.

```
cursorTiltEnabled: false
```

###### `cursorTiltIntensity`

Strength of the cursor tilt effect.

```
cursorTiltIntensity: 8
```

###### `transformEnabled`

Enables CSS transform controls.

```
transformEnabled: false
```

###### `transformRotateX`

Unit: `deg`

Rotation around the X axis in degrees.

```
transformRotateX: 0
```

###### `transformRotateY`

Unit: `deg`

Rotation around the Y axis in degrees.

```
transformRotateY: 0
```

###### `transformRotateZ`

Unit: `deg`

Rotation around the Z axis in degrees.

```
transformRotateZ: 0
```

###### `transformTranslateX`

Unit: `px`

Horizontal translation in pixels.

```
transformTranslateX: 0
```

###### `transformTranslateY`

Unit: `px`

Vertical translation in pixels.

```
transformTranslateY: 0
```

###### `transformTranslateZ`

Unit: `px`

Depth translation in pixels.

```
transformTranslateZ: 0
```

###### `transformScale`

Unit: `ratio`

Uniform scale factor (unitless).

```
transformScale: 1
```

###### `transformPerspective`

Unit: `px`

CSS perspective distance in pixels.

```
transformPerspective: 800
```

##### Advanced

###### `decorationBySelector`

Advanced: apply decoration token overlays for `hover`, `active`, and `focus`. Missing overlay keys inherit the default flat props.

```
decorationBySelector: {
  hover: { backgroundColorLight: "#f3f4f6" }
}
```

###### `clipboard`

_Editor-only control — does not persist its own value._

Editor-only copy/paste helpers for block props.

```
// Editor-only — does not persist a stored value
```

<details><summary>Default props</summary>

```json
{
  "showOnBreakpoints": {},
  "showOnLocales": {},
  "authVisibility": "all",
  "routeLockVisibility": "all",
  "roleVisibility": [],
  "entryActionVisibility": "all",
  "queryPageVisibility": "all",
  "customizeEnabled": false,
  "padding": "none",
  "paddingEnabled": false,
  "sizeByBreakpoint": {},
  "marginsEnabled": false,
  "positionEnabled": false,
  "positionByBreakpoint": {},
  "backgroundEnabled": false,
  "backgroundWidth": "page",
  "backgroundKind": "solid",
  "backgroundColorLight": "",
  "backgroundColorDark": "",
  "gradientAngle": 180,
  "gradientType": "linear",
  "gradientColors": [
    {
      "light": "",
      "dark": "",
      "offset": 50
    },
    {
      "light": "",
      "dark": "",
      "offset": 50
    }
  ],
  "gradientColor1Light": "",
  "gradientColor1Dark": "",
  "gradientColor2Light": "",
  "gradientColor2Dark": "",
  "backgroundImageSrc": "",
  "backgroundImageMode": "cover",
  "backgroundRepeatSize": 100,
  "backgroundPosition": "center",
  "backgroundMotionEnabled": false,
  "backgroundMotionDirectionDeg": 0,
  "backgroundMotionSpeed": 20,
  "backgroundMotionRotateDegPerSec": 0,
  "backgroundVideoSrc": "",
  "backgroundVideoFit": "cover",
  "backgroundVideoLoop": true,
  "backgroundVideoRepeatSize": 100,
  "backgroundAnimationMode": "particle",
  "backgroundAnimShape": "circle",
  "backgroundAnimSvgSrc": "",
  "backgroundAnimColorMode": "solid",
  "backgroundAnimColorLight": "#ffffff88",
  "backgroundAnimColorDark": "#ffffff66",
  "backgroundAnimSize": 12,
  "backgroundAnimJitter": 0.2,
  "backgroundParticleCount": 40,
  "backgroundParticleLifetimeSec": 4,
  "backgroundParticleSpeed": 40,
  "backgroundParticleAnimType": "fade",
  "backgroundParticleFromSide": "left",
  "backgroundParticleToSide": "right",
  "backgroundGridStyle": "cells",
  "backgroundGridMotionDirectionDeg": 0,
  "backgroundGridMotionSpeed": 0,
  "backgroundGridRotateDegPerSec": 0,
  "backgroundGridHoverGrowLimitPct": 50,
  "backgroundGridHoverRotateLimitDeg": 0,
  "backgroundGridReactionTimeSec": 1,
  "backgroundGridHoverGrow": true,
  "backgroundGridHoverRotate": false,
  "backgroundGridHoverColor": false,
  "backgroundGridHoverColorLight": "#ffffff55",
  "backgroundGridHoverColorDark": "#ffffff33",
  "backgroundGridReactionSpeed": 1,
  "pointerEvents": "auto",
  "borderEnabled": false,
  "borderStyle": "solid",
  "borderColorLight": "",
  "borderColorDark": "",
  "shadowEnabled": false,
  "shadowValueLight": "",
  "shadowValueDark": "",
  "scrollAnimationEnabled": false,
  "scrollAnimationType": "fadeIn",
  "scrollAnimationDuration": 600,
  "scrollAnimationDelay": 0,
  "cursorTiltEnabled": false,
  "cursorTiltIntensity": 12,
  "transformEnabled": false,
  "transformRotateX": 0,
  "transformRotateY": 0,
  "transformRotateZ": 0,
  "transformTranslateX": 0,
  "transformTranslateY": 0,
  "transformTranslateZ": 0,
  "transformScale": 1,
  "decorationBySelector": {},
  "columns": [
    {
      "sizing": "auto",
      "content": []
    },
    {
      "sizing": "auto",
      "content": []
    }
  ],
  "gap": 0,
  "justifyContent": "center",
  "alignItems": "center",
  "columnJustifyContent": "center",
  "flexWrap": false
}
```

</details>

### `GridBlock`

Grid

> CSS grid for multi-column page sections (e.g. main + sidebar). Configure columns/gaps per breakpoint rather than nesting many RowBlocks.

#### Fields

##### Layout

###### `cellsEditor`

_Editor-only control — does not persist its own value._

Visual editor for grid cells. Does not persist its own value — writes `cells`.

```
// Writes:
cells: [
  { columnSpan: 1, rowSpan: 1, content: [] }
]
```

###### `cells`

Grid cells with optional column/row span and nested content.

```
cells: [
  { columnSpan: 1, rowSpan: 1, content: [] }
]
```

###### `gridLayout`

_Editor-only control — does not persist its own value._

Editor control for grid columns, gaps, and alignment per breakpoint. Does not persist its own value.

```
// Writes:
columnsByBreakpoint: { desktop: 3 }
columnGap: 16
rowGap: 16
```

##### Other

###### `main`

Primary column content (nested blocks).

###### `side`

Optional side column content.

##### Visibility

###### `showOnBreakpoints`

Per-breakpoint visibility. Set a breakpoint to `false` to hide the block on that viewport. Missing keys default to visible.

```
showOnBreakpoints: { mobile: false }
```

###### `showOnLocales`

Limit which website locales show the block. Empty / missing means all enabled locales. Set a locale to `false` to hide.

```
showOnLocales: { tr: false }
```

###### `authVisibility`

Who can see the block based on website sign-in state.

Options: `all`, `authenticated`, `anonymous`

```
authVisibility: "authenticated"
```

###### `routeLockVisibility`

On locked object routes, show always, only when unlocked, or only when locked.

Options: `all`, `when_unlocked`, `when_locked`

```
routeLockVisibility: "all"
```

###### `roleVisibility`

Optional list of website user role labels. Empty means all roles. Matching is case-sensitive.

```
roleVisibility: ["moderator"]
```

###### `entryActionVisibility`

Object-component only: show when the current entry exposes matching actions.

Options: `all`, `canUpdate`, `canDelete`

```
entryActionVisibility: "all"
```

###### `queryPageVisibility`

Optional: limit list blocks to the first query page only.

Options: `all`, `first_page_only`

```
queryPageVisibility: "all"
```

##### Spacing & sizing

###### `customizeEnabled`

Enables the decoration controls below in the editor.

```
customizeEnabled: true
```

###### `paddingEnabled`

Turns padding controls on for this block.

```
paddingEnabled: true
```

###### `padding`

Unit: `token`

Theme spacing token applied as padding. Tokens let site owners customize spacing while blocks continue to share a consistent design language.

Options: `none`, `xs`, `sm`, `md`, `lg`, `xl`

```
padding: "md"
```

###### `paddingByBreakpoint`

Unit: `token`

Theme spacing token per breakpoint. Use this when the block needs different, but still theme-consistent, spacing at different viewport sizes.

```
paddingByBreakpoint: { desktop: "md", mobile: "sm" }
```

###### `marginsEnabled`

Turns margin controls on (configured via size/position maps).

```
marginsEnabled: false
```

###### `sizeByBreakpoint`

Optional width/height constraints per breakpoint. Modes: `fillParent` (stretch), `fitContent` (intrinsic), `static` (fixed length via `widthStatic`/`heightStatic` + unit), `ratio` (percent of the other axis via `widthRatio`/`heightRatio`).

`static` uses `widthStaticUnit` / `heightStaticUnit`: `px`, `vw`, `vh`, `vmin`, or `vmax` (default `px`). Example full-page background: `widthStatic: 100`, `widthStaticUnit: "vw"`, `heightStatic: 100`, `heightStaticUnit: "vh"` with fixed positioning and `pointerEvents: "none"`. `ratio` values are percentages of the opposite axis. `fillParent` and `fitContent` take no numeric unit.

```
sizeByBreakpoint: {
  desktop: {
    widthMode: "static",
    widthStatic: 100,
    widthStaticUnit: "vw",
    heightMode: "static",
    heightStatic: 100,
    heightStaticUnit: "vh"
  }
}
```

###### `overflow`

CSS overflow on the decoration frame.

Options: `visible`, `hidden`, `auto`, `clip`

```
overflow: "hidden"
```

###### `pointerEvents`

Whether the decoration frame receives pointer events. Use `none` for full-page decorative backgrounds so clicks pass through.

Options: `auto`, `none`

```
pointerEvents: "auto"
```

##### Position

###### `positionEnabled`

Enables absolute/relative positioning overlays.

```
positionEnabled: false
```

###### `positionByBreakpoint`

Positioning overlays per breakpoint (`static`, `relative`, `absolute`, `fixed`, `sticky`) with optional offsets in pixels (`top`, `right`, `bottom`, `left`).

```
positionByBreakpoint: {
  desktop: { position: "relative", top: 0, left: 0 }
}
```

##### Background

###### `backgroundEnabled`

Enables background fill, gradient, or image.

```
backgroundEnabled: true
```

###### `backgroundWidth`

Background span: page column or full viewport bleed.

Options: `page`, `full`

```
backgroundWidth: "page"
```

###### `backgroundKind`

Solid color, gradient, image, muted autoplay video, or canvas animation (particles / reactive grid).

Options: `solid`, `gradient`, `image`, `video`, `animation`

```
backgroundKind: "solid"
```

###### `backgroundColorLight`

Solid background color in light theme.

```
backgroundColorLight: "#ffffff"
```

###### `backgroundColorDark`

Solid background color in dark theme.

```
backgroundColorDark: "#111827"
```

###### `gradientType`

Linear, radial, or conic gradient when `backgroundKind` is `gradient`.

Options: `linear`, `radial`, `conic`

```
gradientType: "linear"
```

###### `gradientAngle`

Unit: `deg`

Linear gradient direction or conic start angle in degrees when `backgroundKind` is `gradient`.

```
gradientAngle: 135
```

###### `gradientColors`

Gradient stops with light/dark pairs and segment offsets (CSS % is the running sum).

```
gradientColors: [
  { light: "#2563eb", dark: "#1e3a8a", offset: 20 },
  { light: "#93c5fd", dark: "#1e40af", offset: 80 }
]
```

###### `backgroundImageSrc`

Background image source when `backgroundKind` is `image`.

```
backgroundImageSrc: "https://cdn.example/bg.jpg"
```

###### `backgroundImageMode`

How the background image is sized.

Options: `cover`, `contain`, `repeat`

```
backgroundImageMode: "cover"
```

###### `backgroundRepeatSize`

Unit: `px`

Tile size in pixels when background image mode is `repeat`.

```
backgroundRepeatSize: 64
```

###### `backgroundPosition`

CSS background-position value.

```
backgroundPosition: "center"
```

###### `backgroundMotionEnabled`

Seamless pan (and optional rotate) for image backgrounds.

```
backgroundMotionEnabled: true
```

###### `backgroundMotionDirectionDeg`

Unit: `deg`

Pan direction in degrees (0 = right).

```
backgroundMotionDirectionDeg: 0
```

###### `backgroundMotionSpeed`

Relative pan speed for seamless cycling.

```
backgroundMotionSpeed: 20
```

###### `backgroundMotionRotateDegPerSec`

Unit: `deg`

Continuous rotation speed in degrees per second (0 = off).

```
backgroundMotionRotateDegPerSec: 0
```

###### `backgroundVideoSrc`

Video URL when `backgroundKind` is `video`. Always muted, autoplay, plays inline; never captures focus.

```
backgroundVideoSrc: "https://cdn.example/bg.mp4"
```

###### `backgroundVideoFit`

`cover` / `fill` use object-fit; `repeat` tiles frames on canvas.

Options: `cover`, `fill`, `repeat`

```
backgroundVideoFit: "cover"
```

###### `backgroundVideoLoop`

Loop the background video (default true).

```
backgroundVideoLoop: true
```

###### `backgroundAnimationMode`

Particle field or reactive grid (filled cells or continuous outlines) when `backgroundKind` is `animation`.

Options: `particle`, `reactiveGrid`

```
backgroundAnimationMode: "particle"
```

###### `backgroundAnimShape`

Built-in shape or custom SVG for particles/grid cells.

Options: `circle`, `square`, `roundedSquare`, `triangle`, `diamond`, `hexagon`, `star`, `cross`, `svg`

```
backgroundAnimShape: "circle"
```

###### `backgroundAnimSvgSrc`

SVG URL when shape is `svg`.

```
backgroundAnimSvgSrc: "https://cdn.example/shape.svg"
```

###### `backgroundAnimColorMode`

`solid` tints shapes; `fromAsset` keeps SVG colors.

Options: `solid`, `fromAsset`

```
backgroundAnimColorMode: "solid"
```

###### `backgroundAnimSize`

Unit: `px`

Base particle or cell size in pixels.

```
backgroundAnimSize: 12
```

###### `backgroundAnimJitter`

Particle-only 0–1 randomization for count, size, lifetime, and speed.

```
backgroundAnimJitter: 0.2
```

###### `backgroundGridStyle`

Reactive grid rendering: filled `cells`, or `continuous` shape outlines tiled edge-to-edge into one connected lattice that ripples around the cursor. Ignored for `svg` shapes, which always render as cells.

Options: `cells`, `continuous`

```
backgroundGridStyle: "cells"
```

###### `backgroundGridHoverGrowLimitPct`

Unit: `%`

Maximum cell size change at the pointer. Positive values grow cells; negative values shrink them. A value of `50` reaches 150% scale after the configured reaction time.

```
backgroundGridHoverGrowLimitPct: 50
```

###### `backgroundGridHoverRotateLimitDeg`

Unit: `deg`

Maximum cell rotation at the pointer. Positive values rotate clockwise; negative values rotate counterclockwise.

```
backgroundGridHoverRotateLimitDeg: 0
```

###### `backgroundGridReactionTimeSec`

Unit: `s`

Seconds for cells or the continuous-grid ripple to reach their configured hover limit, and to return after the pointer leaves.

```
backgroundGridReactionTimeSec: 1
```

##### Border

###### `borderEnabled`

Enables border color, style, width, and radius.

```
borderEnabled: false
```

###### `borderColorLight`

Border color in light theme.

```
borderColorLight: "#e5e7eb"
```

###### `borderColorDark`

Border color in dark theme.

```
borderColorDark: "#374151"
```

###### `borderStyle`

CSS border style.

Options: `solid`, `dashed`, `dotted`

```
borderStyle: "solid"
```

###### `borderWidth`

Unit: `token`

Border width token.

Options: `none`, `sm`, `md`, `lg`

```
borderWidth: "sm"
```

###### `borderRadius`

Unit: `token`

Border radius token.

Options: `none`, `sm`, `md`, `lg`, `xl`, `full`

```
borderRadius: "md"
```

##### Shadow

###### `shadowEnabled`

Enables box shadow values for light/dark themes.

```
shadowEnabled: false
```

###### `shadowValueLight`

CSS box-shadow value in light theme.

```
shadowValueLight: "0 8px 24px rgba(0, 0, 0, 0.12)"
```

###### `shadowValueDark`

CSS box-shadow value in dark theme.

```
shadowValueDark: "0 8px 24px rgba(0, 0, 0, 0.45)"
```

##### Motion & transform

###### `scrollAnimationEnabled`

Enables enter-on-scroll animation.

```
scrollAnimationEnabled: false
```

###### `scrollAnimationType`

Enter-on-scroll animation preset.

Options: `fadeIn`, `slideInBottom`, `slideInTop`, `slideInLeft`, `slideInRight`, `zoomIn`, `zoomOut`, `rotateIn`, `rotateOut`, `bounceIn`, `bounceOut`, `pulse`

```
scrollAnimationType: "fadeIn"
```

###### `scrollAnimationDuration`

Unit: `ms`

Animation duration in milliseconds.

```
scrollAnimationDuration: 600
```

###### `scrollAnimationDelay`

Unit: `ms`

Animation delay in milliseconds.

```
scrollAnimationDelay: 0
```

###### `cursorTiltEnabled`

Tilts the block slightly toward the pointer.

```
cursorTiltEnabled: false
```

###### `cursorTiltIntensity`

Strength of the cursor tilt effect.

```
cursorTiltIntensity: 8
```

###### `transformEnabled`

Enables CSS transform controls.

```
transformEnabled: false
```

###### `transformRotateX`

Unit: `deg`

Rotation around the X axis in degrees.

```
transformRotateX: 0
```

###### `transformRotateY`

Unit: `deg`

Rotation around the Y axis in degrees.

```
transformRotateY: 0
```

###### `transformRotateZ`

Unit: `deg`

Rotation around the Z axis in degrees.

```
transformRotateZ: 0
```

###### `transformTranslateX`

Unit: `px`

Horizontal translation in pixels.

```
transformTranslateX: 0
```

###### `transformTranslateY`

Unit: `px`

Vertical translation in pixels.

```
transformTranslateY: 0
```

###### `transformTranslateZ`

Unit: `px`

Depth translation in pixels.

```
transformTranslateZ: 0
```

###### `transformScale`

Unit: `ratio`

Uniform scale factor (unitless).

```
transformScale: 1
```

###### `transformPerspective`

Unit: `px`

CSS perspective distance in pixels.

```
transformPerspective: 800
```

##### Advanced

###### `decorationBySelector`

Advanced: apply decoration token overlays for `hover`, `active`, and `focus`. Missing overlay keys inherit the default flat props.

```
decorationBySelector: {
  hover: { backgroundColorLight: "#f3f4f6" }
}
```

###### `clipboard`

_Editor-only control — does not persist its own value._

Editor-only copy/paste helpers for block props.

```
// Editor-only — does not persist a stored value
```

<details><summary>Default props</summary>

```json
{
  "showOnBreakpoints": {},
  "showOnLocales": {},
  "authVisibility": "all",
  "routeLockVisibility": "all",
  "roleVisibility": [],
  "entryActionVisibility": "all",
  "queryPageVisibility": "all",
  "customizeEnabled": false,
  "padding": "none",
  "paddingEnabled": false,
  "sizeByBreakpoint": {},
  "marginsEnabled": false,
  "positionEnabled": false,
  "positionByBreakpoint": {},
  "backgroundEnabled": false,
  "backgroundWidth": "page",
  "backgroundKind": "solid",
  "backgroundColorLight": "",
  "backgroundColorDark": "",
  "gradientAngle": 180,
  "gradientType": "linear",
  "gradientColors": [
    {
      "light": "",
      "dark": "",
      "offset": 50
    },
    {
      "light": "",
      "dark": "",
      "offset": 50
    }
  ],
  "gradientColor1Light": "",
  "gradientColor1Dark": "",
  "gradientColor2Light": "",
  "gradientColor2Dark": "",
  "backgroundImageSrc": "",
  "backgroundImageMode": "cover",
  "backgroundRepeatSize": 100,
  "backgroundPosition": "center",
  "backgroundMotionEnabled": false,
  "backgroundMotionDirectionDeg": 0,
  "backgroundMotionSpeed": 20,
  "backgroundMotionRotateDegPerSec": 0,
  "backgroundVideoSrc": "",
  "backgroundVideoFit": "cover",
  "backgroundVideoLoop": true,
  "backgroundVideoRepeatSize": 100,
  "backgroundAnimationMode": "particle",
  "backgroundAnimShape": "circle",
  "backgroundAnimSvgSrc": "",
  "backgroundAnimColorMode": "solid",
  "backgroundAnimColorLight": "#ffffff88",
  "backgroundAnimColorDark": "#ffffff66",
  "backgroundAnimSize": 12,
  "backgroundAnimJitter": 0.2,
  "backgroundParticleCount": 40,
  "backgroundParticleLifetimeSec": 4,
  "backgroundParticleSpeed": 40,
  "backgroundParticleAnimType": "fade",
  "backgroundParticleFromSide": "left",
  "backgroundParticleToSide": "right",
  "backgroundGridStyle": "cells",
  "backgroundGridMotionDirectionDeg": 0,
  "backgroundGridMotionSpeed": 0,
  "backgroundGridRotateDegPerSec": 0,
  "backgroundGridHoverGrowLimitPct": 50,
  "backgroundGridHoverRotateLimitDeg": 0,
  "backgroundGridReactionTimeSec": 1,
  "backgroundGridHoverGrow": true,
  "backgroundGridHoverRotate": false,
  "backgroundGridHoverColor": false,
  "backgroundGridHoverColorLight": "#ffffff55",
  "backgroundGridHoverColorDark": "#ffffff33",
  "backgroundGridReactionSpeed": 1,
  "pointerEvents": "auto",
  "borderEnabled": false,
  "borderStyle": "solid",
  "borderColorLight": "",
  "borderColorDark": "",
  "shadowEnabled": false,
  "shadowValueLight": "",
  "shadowValueDark": "",
  "scrollAnimationEnabled": false,
  "scrollAnimationType": "fadeIn",
  "scrollAnimationDuration": 600,
  "scrollAnimationDelay": 0,
  "cursorTiltEnabled": false,
  "cursorTiltIntensity": 12,
  "transformEnabled": false,
  "transformRotateX": 0,
  "transformRotateY": 0,
  "transformRotateZ": 0,
  "transformTranslateX": 0,
  "transformTranslateY": 0,
  "transformTranslateZ": 0,
  "transformScale": 1,
  "decorationBySelector": {},
  "cells": [
    {
      "columnSpan": 1,
      "rowSpan": 1,
      "content": []
    }
  ],
  "columnsByBreakpoint": {},
  "columnGap": 16,
  "rowGap": 16,
  "columnGapByBreakpoint": {},
  "rowGapByBreakpoint": {},
  "justifyItems": "stretch",
  "alignItems": "stretch",
  "justifyContent": "stretch",
  "alignContent": "stretch",
  "justifyItemsByBreakpoint": {},
  "alignItemsByBreakpoint": {},
  "justifyContentByBreakpoint": {},
  "alignContentByBreakpoint": {}
}
```

</details>

### `HeadingBlock`

Heading

> Primary text hierarchy. Prefer one h1 per page; use h2/h3 for sections and subsections.

#### Examples

**Section heading**

```json
{
  "text": "Latest threads",
  "level": "h2",
  "fontSize": 28
}
```

#### Fields

##### Content

###### `text`

The string value of the heading.

```
text: "My Heading"
```

##### Semantics & behavior

###### `level`

Semantic heading level for the rendered element.

The semantic heading level describes the hierarchy and structure of the content on a page. It is generally recommended that each page have one primary H1 heading, with H2, H3, and subsequent headings used to organize subsections logically. Using multiple H1 headings is generally not recommended when they represent multiple unrelated page topics.

A clear heading hierarchy benefits visitors, screen-reader users, search-engine crawlers, and AI agents by making the page structure easier to understand and navigate.

```
level: "h2"
```

##### Media

###### `icon`

The icon displayed to the left of the heading.

```
icon: "none"
```

##### Typography

###### `textAlign`

Horizontal text alignment.

```
textAlign: "center"
```

###### `fontFamily`

Font family id. Theme tokens (`theme-heading`, `theme-body`, `theme-mono`) or a rich-text font id.

```
fontFamily: "theme-heading"
```

###### `fontSize`

Unit: `px`

Font size in pixels.

```
fontSize: 48
```

###### `fontWeight`

Numeric font weight (CSS font-weight).

```
fontWeight: 600
```

###### `italic`

When true, renders the text in italic style.

```
italic: false
```

###### `underlineMode`

Underline rendering mode for decorated text.

```
underlineMode: "inline"
```

##### Colors

###### `textColorLight`

Text color used in light theme.

```
textColorLight: "#111827"
```

###### `textColorDark`

Text color used in dark theme.

```
textColorDark: "#f9fafb"
```

##### Text decoration

###### `decorationEnabled`

Toggles an underline or accent decoration under the text.

```
decorationEnabled: true
```

###### `decorationSize`

_Editor-only control — does not persist its own value._

Editor control for decoration width, thickness, and spacing. Does not persist its own value.

```
// Writes:
decorationWidth: 96
decorationThickness: 8
decorationSpacing: 12
```

###### `decorationWidth`

Unit: `px`

Width of the text decoration line in pixels.

```
decorationWidth: 96
```

###### `decorationThickness`

Unit: `px`

Stroke thickness of the text decoration in pixels.

```
decorationThickness: 8
```

###### `decorationSpacing`

Unit: `px`

Gap between the text and its decoration in pixels.

```
decorationSpacing: 12
```

###### `decorationColorLight`

Decoration color in light theme.

```
decorationColorLight: "#2563eb"
```

###### `decorationColorDark`

Decoration color in dark theme.

```
decorationColorDark: "#60a5fa"
```

###### `textShadowEnabled`

Enables a drop shadow behind the text.

```
textShadowEnabled: false
```

###### `textShadowSize`

_Editor-only control — does not persist its own value._

Editor control for shadow offset and blur. Does not persist its own value.

```
// Writes:
textShadowOffsetX: 3
textShadowOffsetY: 3
textShadowBlur: 0
```

###### `textShadowOffsetX`

Unit: `px`

Horizontal offset of the text shadow in pixels.

```
textShadowOffsetX: 3
```

###### `textShadowOffsetY`

Unit: `px`

Vertical offset of the text shadow in pixels.

```
textShadowOffsetY: 3
```

###### `textShadowBlur`

Unit: `px`

Blur radius of the text shadow in pixels.

```
textShadowBlur: 0
```

###### `textShadowColorLight`

Text shadow color in light theme.

```
textShadowColorLight: "rgba(0, 0, 0, 0.55)"
```

###### `textShadowColorDark`

Text shadow color in dark theme.

```
textShadowColorDark: "rgba(0, 0, 0, 0.75)"
```

##### Visibility

###### `showOnBreakpoints`

Per-breakpoint visibility. Set a breakpoint to `false` to hide the block on that viewport. Missing keys default to visible.

```
showOnBreakpoints: { mobile: false }
```

###### `showOnLocales`

Limit which website locales show the block. Empty / missing means all enabled locales. Set a locale to `false` to hide.

```
showOnLocales: { tr: false }
```

###### `authVisibility`

Who can see the block based on website sign-in state.

Options: `all`, `authenticated`, `anonymous`

```
authVisibility: "authenticated"
```

###### `routeLockVisibility`

On locked object routes, show always, only when unlocked, or only when locked.

Options: `all`, `when_unlocked`, `when_locked`

```
routeLockVisibility: "all"
```

###### `roleVisibility`

Optional list of website user role labels. Empty means all roles. Matching is case-sensitive.

```
roleVisibility: ["moderator"]
```

###### `entryActionVisibility`

Object-component only: show when the current entry exposes matching actions.

Options: `all`, `canUpdate`, `canDelete`

```
entryActionVisibility: "all"
```

###### `queryPageVisibility`

Optional: limit list blocks to the first query page only.

Options: `all`, `first_page_only`

```
queryPageVisibility: "all"
```

##### Spacing & sizing

###### `customizeEnabled`

Enables the decoration controls below in the editor.

```
customizeEnabled: true
```

###### `paddingEnabled`

Turns padding controls on for this block.

```
paddingEnabled: true
```

###### `padding`

Unit: `token`

Theme spacing token applied as padding. Tokens let site owners customize spacing while blocks continue to share a consistent design language.

Options: `none`, `xs`, `sm`, `md`, `lg`, `xl`

```
padding: "md"
```

###### `paddingByBreakpoint`

Unit: `token`

Theme spacing token per breakpoint. Use this when the block needs different, but still theme-consistent, spacing at different viewport sizes.

```
paddingByBreakpoint: { desktop: "md", mobile: "sm" }
```

###### `marginsEnabled`

Turns margin controls on (configured via size/position maps).

```
marginsEnabled: false
```

###### `sizeByBreakpoint`

Optional width/height constraints per breakpoint. Modes: `fillParent` (stretch), `fitContent` (intrinsic), `static` (fixed length via `widthStatic`/`heightStatic` + unit), `ratio` (percent of the other axis via `widthRatio`/`heightRatio`).

`static` uses `widthStaticUnit` / `heightStaticUnit`: `px`, `vw`, `vh`, `vmin`, or `vmax` (default `px`). Example full-page background: `widthStatic: 100`, `widthStaticUnit: "vw"`, `heightStatic: 100`, `heightStaticUnit: "vh"` with fixed positioning and `pointerEvents: "none"`. `ratio` values are percentages of the opposite axis. `fillParent` and `fitContent` take no numeric unit.

```
sizeByBreakpoint: {
  desktop: {
    widthMode: "static",
    widthStatic: 100,
    widthStaticUnit: "vw",
    heightMode: "static",
    heightStatic: 100,
    heightStaticUnit: "vh"
  }
}
```

###### `overflow`

CSS overflow on the decoration frame.

Options: `visible`, `hidden`, `auto`, `clip`

```
overflow: "hidden"
```

###### `pointerEvents`

Whether the decoration frame receives pointer events. Use `none` for full-page decorative backgrounds so clicks pass through.

Options: `auto`, `none`

```
pointerEvents: "auto"
```

##### Position

###### `positionEnabled`

Enables absolute/relative positioning overlays.

```
positionEnabled: false
```

###### `positionByBreakpoint`

Positioning overlays per breakpoint (`static`, `relative`, `absolute`, `fixed`, `sticky`) with optional offsets in pixels (`top`, `right`, `bottom`, `left`).

```
positionByBreakpoint: {
  desktop: { position: "relative", top: 0, left: 0 }
}
```

##### Background

###### `backgroundEnabled`

Enables background fill, gradient, or image.

```
backgroundEnabled: true
```

###### `backgroundWidth`

Background span: page column or full viewport bleed.

Options: `page`, `full`

```
backgroundWidth: "page"
```

###### `backgroundKind`

Solid color, gradient, image, muted autoplay video, or canvas animation (particles / reactive grid).

Options: `solid`, `gradient`, `image`, `video`, `animation`

```
backgroundKind: "solid"
```

###### `backgroundColorLight`

Solid background color in light theme.

```
backgroundColorLight: "#ffffff"
```

###### `backgroundColorDark`

Solid background color in dark theme.

```
backgroundColorDark: "#111827"
```

###### `gradientType`

Linear, radial, or conic gradient when `backgroundKind` is `gradient`.

Options: `linear`, `radial`, `conic`

```
gradientType: "linear"
```

###### `gradientAngle`

Unit: `deg`

Linear gradient direction or conic start angle in degrees when `backgroundKind` is `gradient`.

```
gradientAngle: 135
```

###### `gradientColors`

Gradient stops with light/dark pairs and segment offsets (CSS % is the running sum).

```
gradientColors: [
  { light: "#2563eb", dark: "#1e3a8a", offset: 20 },
  { light: "#93c5fd", dark: "#1e40af", offset: 80 }
]
```

###### `backgroundImageSrc`

Background image source when `backgroundKind` is `image`.

```
backgroundImageSrc: "https://cdn.example/bg.jpg"
```

###### `backgroundImageMode`

How the background image is sized.

Options: `cover`, `contain`, `repeat`

```
backgroundImageMode: "cover"
```

###### `backgroundRepeatSize`

Unit: `px`

Tile size in pixels when background image mode is `repeat`.

```
backgroundRepeatSize: 64
```

###### `backgroundPosition`

CSS background-position value.

```
backgroundPosition: "center"
```

###### `backgroundMotionEnabled`

Seamless pan (and optional rotate) for image backgrounds.

```
backgroundMotionEnabled: true
```

###### `backgroundMotionDirectionDeg`

Unit: `deg`

Pan direction in degrees (0 = right).

```
backgroundMotionDirectionDeg: 0
```

###### `backgroundMotionSpeed`

Relative pan speed for seamless cycling.

```
backgroundMotionSpeed: 20
```

###### `backgroundMotionRotateDegPerSec`

Unit: `deg`

Continuous rotation speed in degrees per second (0 = off).

```
backgroundMotionRotateDegPerSec: 0
```

###### `backgroundVideoSrc`

Video URL when `backgroundKind` is `video`. Always muted, autoplay, plays inline; never captures focus.

```
backgroundVideoSrc: "https://cdn.example/bg.mp4"
```

###### `backgroundVideoFit`

`cover` / `fill` use object-fit; `repeat` tiles frames on canvas.

Options: `cover`, `fill`, `repeat`

```
backgroundVideoFit: "cover"
```

###### `backgroundVideoLoop`

Loop the background video (default true).

```
backgroundVideoLoop: true
```

###### `backgroundAnimationMode`

Particle field or reactive grid (filled cells or continuous outlines) when `backgroundKind` is `animation`.

Options: `particle`, `reactiveGrid`

```
backgroundAnimationMode: "particle"
```

###### `backgroundAnimShape`

Built-in shape or custom SVG for particles/grid cells.

Options: `circle`, `square`, `roundedSquare`, `triangle`, `diamond`, `hexagon`, `star`, `cross`, `svg`

```
backgroundAnimShape: "circle"
```

###### `backgroundAnimSvgSrc`

SVG URL when shape is `svg`.

```
backgroundAnimSvgSrc: "https://cdn.example/shape.svg"
```

###### `backgroundAnimColorMode`

`solid` tints shapes; `fromAsset` keeps SVG colors.

Options: `solid`, `fromAsset`

```
backgroundAnimColorMode: "solid"
```

###### `backgroundAnimSize`

Unit: `px`

Base particle or cell size in pixels.

```
backgroundAnimSize: 12
```

###### `backgroundAnimJitter`

Particle-only 0–1 randomization for count, size, lifetime, and speed.

```
backgroundAnimJitter: 0.2
```

###### `backgroundGridStyle`

Reactive grid rendering: filled `cells`, or `continuous` shape outlines tiled edge-to-edge into one connected lattice that ripples around the cursor. Ignored for `svg` shapes, which always render as cells.

Options: `cells`, `continuous`

```
backgroundGridStyle: "cells"
```

###### `backgroundGridHoverGrowLimitPct`

Unit: `%`

Maximum cell size change at the pointer. Positive values grow cells; negative values shrink them. A value of `50` reaches 150% scale after the configured reaction time.

```
backgroundGridHoverGrowLimitPct: 50
```

###### `backgroundGridHoverRotateLimitDeg`

Unit: `deg`

Maximum cell rotation at the pointer. Positive values rotate clockwise; negative values rotate counterclockwise.

```
backgroundGridHoverRotateLimitDeg: 0
```

###### `backgroundGridReactionTimeSec`

Unit: `s`

Seconds for cells or the continuous-grid ripple to reach their configured hover limit, and to return after the pointer leaves.

```
backgroundGridReactionTimeSec: 1
```

##### Border

###### `borderEnabled`

Enables border color, style, width, and radius.

```
borderEnabled: false
```

###### `borderColorLight`

Border color in light theme.

```
borderColorLight: "#e5e7eb"
```

###### `borderColorDark`

Border color in dark theme.

```
borderColorDark: "#374151"
```

###### `borderStyle`

CSS border style.

Options: `solid`, `dashed`, `dotted`

```
borderStyle: "solid"
```

###### `borderWidth`

Unit: `token`

Border width token.

Options: `none`, `sm`, `md`, `lg`

```
borderWidth: "sm"
```

###### `borderRadius`

Unit: `token`

Border radius token.

Options: `none`, `sm`, `md`, `lg`, `xl`, `full`

```
borderRadius: "md"
```

##### Shadow

###### `shadowEnabled`

Enables box shadow values for light/dark themes.

```
shadowEnabled: false
```

###### `shadowValueLight`

CSS box-shadow value in light theme.

```
shadowValueLight: "0 8px 24px rgba(0, 0, 0, 0.12)"
```

###### `shadowValueDark`

CSS box-shadow value in dark theme.

```
shadowValueDark: "0 8px 24px rgba(0, 0, 0, 0.45)"
```

##### Motion & transform

###### `scrollAnimationEnabled`

Enables enter-on-scroll animation.

```
scrollAnimationEnabled: false
```

###### `scrollAnimationType`

Enter-on-scroll animation preset.

Options: `fadeIn`, `slideInBottom`, `slideInTop`, `slideInLeft`, `slideInRight`, `zoomIn`, `zoomOut`, `rotateIn`, `rotateOut`, `bounceIn`, `bounceOut`, `pulse`

```
scrollAnimationType: "fadeIn"
```

###### `scrollAnimationDuration`

Unit: `ms`

Animation duration in milliseconds.

```
scrollAnimationDuration: 600
```

###### `scrollAnimationDelay`

Unit: `ms`

Animation delay in milliseconds.

```
scrollAnimationDelay: 0
```

###### `cursorTiltEnabled`

Tilts the block slightly toward the pointer.

```
cursorTiltEnabled: false
```

###### `cursorTiltIntensity`

Strength of the cursor tilt effect.

```
cursorTiltIntensity: 8
```

###### `transformEnabled`

Enables CSS transform controls.

```
transformEnabled: false
```

###### `transformRotateX`

Unit: `deg`

Rotation around the X axis in degrees.

```
transformRotateX: 0
```

###### `transformRotateY`

Unit: `deg`

Rotation around the Y axis in degrees.

```
transformRotateY: 0
```

###### `transformRotateZ`

Unit: `deg`

Rotation around the Z axis in degrees.

```
transformRotateZ: 0
```

###### `transformTranslateX`

Unit: `px`

Horizontal translation in pixels.

```
transformTranslateX: 0
```

###### `transformTranslateY`

Unit: `px`

Vertical translation in pixels.

```
transformTranslateY: 0
```

###### `transformTranslateZ`

Unit: `px`

Depth translation in pixels.

```
transformTranslateZ: 0
```

###### `transformScale`

Unit: `ratio`

Uniform scale factor (unitless).

```
transformScale: 1
```

###### `transformPerspective`

Unit: `px`

CSS perspective distance in pixels.

```
transformPerspective: 800
```

##### Advanced

###### `decorationBySelector`

Advanced: apply decoration token overlays for `hover`, `active`, and `focus`. Missing overlay keys inherit the default flat props.

```
decorationBySelector: {
  hover: { backgroundColorLight: "#f3f4f6" }
}
```

###### `clipboard`

_Editor-only control — does not persist its own value._

Editor-only copy/paste helpers for block props.

```
// Editor-only — does not persist a stored value
```

<details><summary>Default props</summary>

```json
{
  "showOnBreakpoints": {},
  "showOnLocales": {},
  "authVisibility": "all",
  "routeLockVisibility": "all",
  "roleVisibility": [],
  "entryActionVisibility": "all",
  "queryPageVisibility": "all",
  "customizeEnabled": false,
  "padding": "none",
  "paddingEnabled": false,
  "sizeByBreakpoint": {},
  "marginsEnabled": false,
  "positionEnabled": false,
  "positionByBreakpoint": {},
  "backgroundEnabled": false,
  "backgroundWidth": "page",
  "backgroundKind": "solid",
  "backgroundColorLight": "",
  "backgroundColorDark": "",
  "gradientAngle": 180,
  "gradientType": "linear",
  "gradientColors": [
    {
      "light": "",
      "dark": "",
      "offset": 50
    },
    {
      "light": "",
      "dark": "",
      "offset": 50
    }
  ],
  "gradientColor1Light": "",
  "gradientColor1Dark": "",
  "gradientColor2Light": "",
  "gradientColor2Dark": "",
  "backgroundImageSrc": "",
  "backgroundImageMode": "cover",
  "backgroundRepeatSize": 100,
  "backgroundPosition": "center",
  "backgroundMotionEnabled": false,
  "backgroundMotionDirectionDeg": 0,
  "backgroundMotionSpeed": 20,
  "backgroundMotionRotateDegPerSec": 0,
  "backgroundVideoSrc": "",
  "backgroundVideoFit": "cover",
  "backgroundVideoLoop": true,
  "backgroundVideoRepeatSize": 100,
  "backgroundAnimationMode": "particle",
  "backgroundAnimShape": "circle",
  "backgroundAnimSvgSrc": "",
  "backgroundAnimColorMode": "solid",
  "backgroundAnimColorLight": "#ffffff88",
  "backgroundAnimColorDark": "#ffffff66",
  "backgroundAnimSize": 12,
  "backgroundAnimJitter": 0.2,
  "backgroundParticleCount": 40,
  "backgroundParticleLifetimeSec": 4,
  "backgroundParticleSpeed": 40,
  "backgroundParticleAnimType": "fade",
  "backgroundParticleFromSide": "left",
  "backgroundParticleToSide": "right",
  "backgroundGridStyle": "cells",
  "backgroundGridMotionDirectionDeg": 0,
  "backgroundGridMotionSpeed": 0,
  "backgroundGridRotateDegPerSec": 0,
  "backgroundGridHoverGrowLimitPct": 50,
  "backgroundGridHoverRotateLimitDeg": 0,
  "backgroundGridReactionTimeSec": 1,
  "backgroundGridHoverGrow": true,
  "backgroundGridHoverRotate": false,
  "backgroundGridHoverColor": false,
  "backgroundGridHoverColorLight": "#ffffff55",
  "backgroundGridHoverColorDark": "#ffffff33",
  "backgroundGridReactionSpeed": 1,
  "pointerEvents": "auto",
  "borderEnabled": false,
  "borderStyle": "solid",
  "borderColorLight": "",
  "borderColorDark": "",
  "shadowEnabled": false,
  "shadowValueLight": "",
  "shadowValueDark": "",
  "scrollAnimationEnabled": false,
  "scrollAnimationType": "fadeIn",
  "scrollAnimationDuration": 600,
  "scrollAnimationDelay": 0,
  "cursorTiltEnabled": false,
  "cursorTiltIntensity": 12,
  "transformEnabled": false,
  "transformRotateX": 0,
  "transformRotateY": 0,
  "transformRotateZ": 0,
  "transformTranslateX": 0,
  "transformTranslateY": 0,
  "transformTranslateZ": 0,
  "transformScale": 1,
  "decorationBySelector": {},
  "icon": "none",
  "level": "h2",
  "textAlign": "left",
  "fontSize": 48,
  "fontWeight": 600,
  "fontFamily": "theme-heading",
  "italic": false,
  "textColorLight": "",
  "textColorDark": "",
  "decorationEnabled": false,
  "decorationWidth": 96,
  "decorationThickness": 8,
  "decorationSpacing": 12,
  "decorationColorLight": "",
  "decorationColorDark": "",
  "underlineMode": "inline",
  "textShadowEnabled": false,
  "textShadowOffsetX": 3,
  "textShadowOffsetY": 3,
  "textShadowBlur": 0,
  "textShadowColorLight": "rgba(0, 0, 0, 0.55)",
  "textShadowColorDark": "rgba(0, 0, 0, 0.7)"
}
```

</details>

### `RichTextBlock`

Rich text

> TipTap HTML body for longer copy. Keep first-viewport copy short; put long articles in object fields bound via ObjectBoundRichText. See shared concepts → Rich text.

#### Fields

##### Content

###### `content`

TipTap HTML string (not a slot). See shared concepts → Rich text.

```
content: "<p>Hello <strong>world</strong></p>"
```

##### Visibility

###### `showOnBreakpoints`

Per-breakpoint visibility. Set a breakpoint to `false` to hide the block on that viewport. Missing keys default to visible.

```
showOnBreakpoints: { mobile: false }
```

###### `showOnLocales`

Limit which website locales show the block. Empty / missing means all enabled locales. Set a locale to `false` to hide.

```
showOnLocales: { tr: false }
```

###### `authVisibility`

Who can see the block based on website sign-in state.

Options: `all`, `authenticated`, `anonymous`

```
authVisibility: "authenticated"
```

###### `routeLockVisibility`

On locked object routes, show always, only when unlocked, or only when locked.

Options: `all`, `when_unlocked`, `when_locked`

```
routeLockVisibility: "all"
```

###### `roleVisibility`

Optional list of website user role labels. Empty means all roles. Matching is case-sensitive.

```
roleVisibility: ["moderator"]
```

###### `entryActionVisibility`

Object-component only: show when the current entry exposes matching actions.

Options: `all`, `canUpdate`, `canDelete`

```
entryActionVisibility: "all"
```

###### `queryPageVisibility`

Optional: limit list blocks to the first query page only.

Options: `all`, `first_page_only`

```
queryPageVisibility: "all"
```

##### Spacing & sizing

###### `customizeEnabled`

Enables the decoration controls below in the editor.

```
customizeEnabled: true
```

###### `paddingEnabled`

Turns padding controls on for this block.

```
paddingEnabled: true
```

###### `padding`

Unit: `token`

Theme spacing token applied as padding. Tokens let site owners customize spacing while blocks continue to share a consistent design language.

Options: `none`, `xs`, `sm`, `md`, `lg`, `xl`

```
padding: "md"
```

###### `paddingByBreakpoint`

Unit: `token`

Theme spacing token per breakpoint. Use this when the block needs different, but still theme-consistent, spacing at different viewport sizes.

```
paddingByBreakpoint: { desktop: "md", mobile: "sm" }
```

###### `marginsEnabled`

Turns margin controls on (configured via size/position maps).

```
marginsEnabled: false
```

###### `sizeByBreakpoint`

Optional width/height constraints per breakpoint. Modes: `fillParent` (stretch), `fitContent` (intrinsic), `static` (fixed length via `widthStatic`/`heightStatic` + unit), `ratio` (percent of the other axis via `widthRatio`/`heightRatio`).

`static` uses `widthStaticUnit` / `heightStaticUnit`: `px`, `vw`, `vh`, `vmin`, or `vmax` (default `px`). Example full-page background: `widthStatic: 100`, `widthStaticUnit: "vw"`, `heightStatic: 100`, `heightStaticUnit: "vh"` with fixed positioning and `pointerEvents: "none"`. `ratio` values are percentages of the opposite axis. `fillParent` and `fitContent` take no numeric unit.

```
sizeByBreakpoint: {
  desktop: {
    widthMode: "static",
    widthStatic: 100,
    widthStaticUnit: "vw",
    heightMode: "static",
    heightStatic: 100,
    heightStaticUnit: "vh"
  }
}
```

###### `overflow`

CSS overflow on the decoration frame.

Options: `visible`, `hidden`, `auto`, `clip`

```
overflow: "hidden"
```

###### `pointerEvents`

Whether the decoration frame receives pointer events. Use `none` for full-page decorative backgrounds so clicks pass through.

Options: `auto`, `none`

```
pointerEvents: "auto"
```

##### Position

###### `positionEnabled`

Enables absolute/relative positioning overlays.

```
positionEnabled: false
```

###### `positionByBreakpoint`

Positioning overlays per breakpoint (`static`, `relative`, `absolute`, `fixed`, `sticky`) with optional offsets in pixels (`top`, `right`, `bottom`, `left`).

```
positionByBreakpoint: {
  desktop: { position: "relative", top: 0, left: 0 }
}
```

##### Background

###### `backgroundEnabled`

Enables background fill, gradient, or image.

```
backgroundEnabled: true
```

###### `backgroundWidth`

Background span: page column or full viewport bleed.

Options: `page`, `full`

```
backgroundWidth: "page"
```

###### `backgroundKind`

Solid color, gradient, image, muted autoplay video, or canvas animation (particles / reactive grid).

Options: `solid`, `gradient`, `image`, `video`, `animation`

```
backgroundKind: "solid"
```

###### `backgroundColorLight`

Solid background color in light theme.

```
backgroundColorLight: "#ffffff"
```

###### `backgroundColorDark`

Solid background color in dark theme.

```
backgroundColorDark: "#111827"
```

###### `gradientType`

Linear, radial, or conic gradient when `backgroundKind` is `gradient`.

Options: `linear`, `radial`, `conic`

```
gradientType: "linear"
```

###### `gradientAngle`

Unit: `deg`

Linear gradient direction or conic start angle in degrees when `backgroundKind` is `gradient`.

```
gradientAngle: 135
```

###### `gradientColors`

Gradient stops with light/dark pairs and segment offsets (CSS % is the running sum).

```
gradientColors: [
  { light: "#2563eb", dark: "#1e3a8a", offset: 20 },
  { light: "#93c5fd", dark: "#1e40af", offset: 80 }
]
```

###### `backgroundImageSrc`

Background image source when `backgroundKind` is `image`.

```
backgroundImageSrc: "https://cdn.example/bg.jpg"
```

###### `backgroundImageMode`

How the background image is sized.

Options: `cover`, `contain`, `repeat`

```
backgroundImageMode: "cover"
```

###### `backgroundRepeatSize`

Unit: `px`

Tile size in pixels when background image mode is `repeat`.

```
backgroundRepeatSize: 64
```

###### `backgroundPosition`

CSS background-position value.

```
backgroundPosition: "center"
```

###### `backgroundMotionEnabled`

Seamless pan (and optional rotate) for image backgrounds.

```
backgroundMotionEnabled: true
```

###### `backgroundMotionDirectionDeg`

Unit: `deg`

Pan direction in degrees (0 = right).

```
backgroundMotionDirectionDeg: 0
```

###### `backgroundMotionSpeed`

Relative pan speed for seamless cycling.

```
backgroundMotionSpeed: 20
```

###### `backgroundMotionRotateDegPerSec`

Unit: `deg`

Continuous rotation speed in degrees per second (0 = off).

```
backgroundMotionRotateDegPerSec: 0
```

###### `backgroundVideoSrc`

Video URL when `backgroundKind` is `video`. Always muted, autoplay, plays inline; never captures focus.

```
backgroundVideoSrc: "https://cdn.example/bg.mp4"
```

###### `backgroundVideoFit`

`cover` / `fill` use object-fit; `repeat` tiles frames on canvas.

Options: `cover`, `fill`, `repeat`

```
backgroundVideoFit: "cover"
```

###### `backgroundVideoLoop`

Loop the background video (default true).

```
backgroundVideoLoop: true
```

###### `backgroundAnimationMode`

Particle field or reactive grid (filled cells or continuous outlines) when `backgroundKind` is `animation`.

Options: `particle`, `reactiveGrid`

```
backgroundAnimationMode: "particle"
```

###### `backgroundAnimShape`

Built-in shape or custom SVG for particles/grid cells.

Options: `circle`, `square`, `roundedSquare`, `triangle`, `diamond`, `hexagon`, `star`, `cross`, `svg`

```
backgroundAnimShape: "circle"
```

###### `backgroundAnimSvgSrc`

SVG URL when shape is `svg`.

```
backgroundAnimSvgSrc: "https://cdn.example/shape.svg"
```

###### `backgroundAnimColorMode`

`solid` tints shapes; `fromAsset` keeps SVG colors.

Options: `solid`, `fromAsset`

```
backgroundAnimColorMode: "solid"
```

###### `backgroundAnimSize`

Unit: `px`

Base particle or cell size in pixels.

```
backgroundAnimSize: 12
```

###### `backgroundAnimJitter`

Particle-only 0–1 randomization for count, size, lifetime, and speed.

```
backgroundAnimJitter: 0.2
```

###### `backgroundGridStyle`

Reactive grid rendering: filled `cells`, or `continuous` shape outlines tiled edge-to-edge into one connected lattice that ripples around the cursor. Ignored for `svg` shapes, which always render as cells.

Options: `cells`, `continuous`

```
backgroundGridStyle: "cells"
```

###### `backgroundGridHoverGrowLimitPct`

Unit: `%`

Maximum cell size change at the pointer. Positive values grow cells; negative values shrink them. A value of `50` reaches 150% scale after the configured reaction time.

```
backgroundGridHoverGrowLimitPct: 50
```

###### `backgroundGridHoverRotateLimitDeg`

Unit: `deg`

Maximum cell rotation at the pointer. Positive values rotate clockwise; negative values rotate counterclockwise.

```
backgroundGridHoverRotateLimitDeg: 0
```

###### `backgroundGridReactionTimeSec`

Unit: `s`

Seconds for cells or the continuous-grid ripple to reach their configured hover limit, and to return after the pointer leaves.

```
backgroundGridReactionTimeSec: 1
```

##### Border

###### `borderEnabled`

Enables border color, style, width, and radius.

```
borderEnabled: false
```

###### `borderColorLight`

Border color in light theme.

```
borderColorLight: "#e5e7eb"
```

###### `borderColorDark`

Border color in dark theme.

```
borderColorDark: "#374151"
```

###### `borderStyle`

CSS border style.

Options: `solid`, `dashed`, `dotted`

```
borderStyle: "solid"
```

###### `borderWidth`

Unit: `token`

Border width token.

Options: `none`, `sm`, `md`, `lg`

```
borderWidth: "sm"
```

###### `borderRadius`

Unit: `token`

Border radius token.

Options: `none`, `sm`, `md`, `lg`, `xl`, `full`

```
borderRadius: "md"
```

##### Shadow

###### `shadowEnabled`

Enables box shadow values for light/dark themes.

```
shadowEnabled: false
```

###### `shadowValueLight`

CSS box-shadow value in light theme.

```
shadowValueLight: "0 8px 24px rgba(0, 0, 0, 0.12)"
```

###### `shadowValueDark`

CSS box-shadow value in dark theme.

```
shadowValueDark: "0 8px 24px rgba(0, 0, 0, 0.45)"
```

##### Motion & transform

###### `scrollAnimationEnabled`

Enables enter-on-scroll animation.

```
scrollAnimationEnabled: false
```

###### `scrollAnimationType`

Enter-on-scroll animation preset.

Options: `fadeIn`, `slideInBottom`, `slideInTop`, `slideInLeft`, `slideInRight`, `zoomIn`, `zoomOut`, `rotateIn`, `rotateOut`, `bounceIn`, `bounceOut`, `pulse`

```
scrollAnimationType: "fadeIn"
```

###### `scrollAnimationDuration`

Unit: `ms`

Animation duration in milliseconds.

```
scrollAnimationDuration: 600
```

###### `scrollAnimationDelay`

Unit: `ms`

Animation delay in milliseconds.

```
scrollAnimationDelay: 0
```

###### `cursorTiltEnabled`

Tilts the block slightly toward the pointer.

```
cursorTiltEnabled: false
```

###### `cursorTiltIntensity`

Strength of the cursor tilt effect.

```
cursorTiltIntensity: 8
```

###### `transformEnabled`

Enables CSS transform controls.

```
transformEnabled: false
```

###### `transformRotateX`

Unit: `deg`

Rotation around the X axis in degrees.

```
transformRotateX: 0
```

###### `transformRotateY`

Unit: `deg`

Rotation around the Y axis in degrees.

```
transformRotateY: 0
```

###### `transformRotateZ`

Unit: `deg`

Rotation around the Z axis in degrees.

```
transformRotateZ: 0
```

###### `transformTranslateX`

Unit: `px`

Horizontal translation in pixels.

```
transformTranslateX: 0
```

###### `transformTranslateY`

Unit: `px`

Vertical translation in pixels.

```
transformTranslateY: 0
```

###### `transformTranslateZ`

Unit: `px`

Depth translation in pixels.

```
transformTranslateZ: 0
```

###### `transformScale`

Unit: `ratio`

Uniform scale factor (unitless).

```
transformScale: 1
```

###### `transformPerspective`

Unit: `px`

CSS perspective distance in pixels.

```
transformPerspective: 800
```

##### Advanced

###### `decorationBySelector`

Advanced: apply decoration token overlays for `hover`, `active`, and `focus`. Missing overlay keys inherit the default flat props.

```
decorationBySelector: {
  hover: { backgroundColorLight: "#f3f4f6" }
}
```

###### `clipboard`

_Editor-only control — does not persist its own value._

Editor-only copy/paste helpers for block props.

```
// Editor-only — does not persist a stored value
```

<details><summary>Default props</summary>

```json
{
  "showOnBreakpoints": {},
  "showOnLocales": {},
  "authVisibility": "all",
  "routeLockVisibility": "all",
  "roleVisibility": [],
  "entryActionVisibility": "all",
  "queryPageVisibility": "all",
  "customizeEnabled": false,
  "padding": "none",
  "paddingEnabled": false,
  "sizeByBreakpoint": {},
  "marginsEnabled": false,
  "positionEnabled": false,
  "positionByBreakpoint": {},
  "backgroundEnabled": false,
  "backgroundWidth": "page",
  "backgroundKind": "solid",
  "backgroundColorLight": "",
  "backgroundColorDark": "",
  "gradientAngle": 180,
  "gradientType": "linear",
  "gradientColors": [
    {
      "light": "",
      "dark": "",
      "offset": 50
    },
    {
      "light": "",
      "dark": "",
      "offset": 50
    }
  ],
  "gradientColor1Light": "",
  "gradientColor1Dark": "",
  "gradientColor2Light": "",
  "gradientColor2Dark": "",
  "backgroundImageSrc": "",
  "backgroundImageMode": "cover",
  "backgroundRepeatSize": 100,
  "backgroundPosition": "center",
  "backgroundMotionEnabled": false,
  "backgroundMotionDirectionDeg": 0,
  "backgroundMotionSpeed": 20,
  "backgroundMotionRotateDegPerSec": 0,
  "backgroundVideoSrc": "",
  "backgroundVideoFit": "cover",
  "backgroundVideoLoop": true,
  "backgroundVideoRepeatSize": 100,
  "backgroundAnimationMode": "particle",
  "backgroundAnimShape": "circle",
  "backgroundAnimSvgSrc": "",
  "backgroundAnimColorMode": "solid",
  "backgroundAnimColorLight": "#ffffff88",
  "backgroundAnimColorDark": "#ffffff66",
  "backgroundAnimSize": 12,
  "backgroundAnimJitter": 0.2,
  "backgroundParticleCount": 40,
  "backgroundParticleLifetimeSec": 4,
  "backgroundParticleSpeed": 40,
  "backgroundParticleAnimType": "fade",
  "backgroundParticleFromSide": "left",
  "backgroundParticleToSide": "right",
  "backgroundGridStyle": "cells",
  "backgroundGridMotionDirectionDeg": 0,
  "backgroundGridMotionSpeed": 0,
  "backgroundGridRotateDegPerSec": 0,
  "backgroundGridHoverGrowLimitPct": 50,
  "backgroundGridHoverRotateLimitDeg": 0,
  "backgroundGridReactionTimeSec": 1,
  "backgroundGridHoverGrow": true,
  "backgroundGridHoverRotate": false,
  "backgroundGridHoverColor": false,
  "backgroundGridHoverColorLight": "#ffffff55",
  "backgroundGridHoverColorDark": "#ffffff33",
  "backgroundGridReactionSpeed": 1,
  "pointerEvents": "auto",
  "borderEnabled": false,
  "borderStyle": "solid",
  "borderColorLight": "",
  "borderColorDark": "",
  "shadowEnabled": false,
  "shadowValueLight": "",
  "shadowValueDark": "",
  "scrollAnimationEnabled": false,
  "scrollAnimationType": "fadeIn",
  "scrollAnimationDuration": 600,
  "scrollAnimationDelay": 0,
  "cursorTiltEnabled": false,
  "cursorTiltIntensity": 12,
  "transformEnabled": false,
  "transformRotateX": 0,
  "transformRotateY": 0,
  "transformRotateZ": 0,
  "transformTranslateX": 0,
  "transformTranslateY": 0,
  "transformTranslateZ": 0,
  "transformScale": 1,
  "decorationBySelector": {}
}
```

</details>

### `ButtonBlock`

Button

> Call-to-action button. Prefer sitemap routes or relative paths over hard-coded absolute URLs when linking inside the site. Action `modal` toggles a ModalBlock by its stable Puck id (label comes from the modal’s Name field).

#### Examples

**Primary CTA**

```json
{
  "text": "Create thread",
  "url": "/categories/[id]/new",
  "appearance": "filled"
}
```

#### Fields

##### Content

###### `text`

Button label as TipTap HTML. See shared concepts → Rich text.

```
text: "<p>Browse</p>"
```

##### Semantics & behavior

###### `action`

What happens on click.

```
action: "navigate"
```

##### Links

###### `url`

Href. May include object route params like `/threads/[id]`.

##### Other

###### `modalId`

When action is `modal`, the target ModalBlock’s stable `props.id`. Renaming the modal does not change this id. Missing targets no-op at runtime.

```
modalId: "ModalBlock-abc123"
```

##### Typography

###### `appearance`

Visual style (filled, outline, etc.).

##### Colors

###### `textColorLight`

Text color used in light theme.

```
textColorLight: "#111827"
```

##### Visibility

###### `showOnBreakpoints`

Per-breakpoint visibility. Set a breakpoint to `false` to hide the block on that viewport. Missing keys default to visible.

```
showOnBreakpoints: { mobile: false }
```

###### `showOnLocales`

Limit which website locales show the block. Empty / missing means all enabled locales. Set a locale to `false` to hide.

```
showOnLocales: { tr: false }
```

###### `authVisibility`

Who can see the block based on website sign-in state.

Options: `all`, `authenticated`, `anonymous`

```
authVisibility: "authenticated"
```

###### `routeLockVisibility`

On locked object routes, show always, only when unlocked, or only when locked.

Options: `all`, `when_unlocked`, `when_locked`

```
routeLockVisibility: "all"
```

###### `roleVisibility`

Optional list of website user role labels. Empty means all roles. Matching is case-sensitive.

```
roleVisibility: ["moderator"]
```

###### `entryActionVisibility`

Object-component only: show when the current entry exposes matching actions.

Options: `all`, `canUpdate`, `canDelete`

```
entryActionVisibility: "all"
```

###### `queryPageVisibility`

Optional: limit list blocks to the first query page only.

Options: `all`, `first_page_only`

```
queryPageVisibility: "all"
```

##### Spacing & sizing

###### `customizeEnabled`

Enables the decoration controls below in the editor.

```
customizeEnabled: true
```

###### `paddingEnabled`

Turns padding controls on for this block.

```
paddingEnabled: true
```

###### `padding`

Unit: `token`

Theme spacing token applied as padding. Tokens let site owners customize spacing while blocks continue to share a consistent design language.

Options: `none`, `xs`, `sm`, `md`, `lg`, `xl`

```
padding: "md"
```

###### `paddingByBreakpoint`

Unit: `token`

Theme spacing token per breakpoint. Use this when the block needs different, but still theme-consistent, spacing at different viewport sizes.

```
paddingByBreakpoint: { desktop: "md", mobile: "sm" }
```

###### `marginsEnabled`

Turns margin controls on (configured via size/position maps).

```
marginsEnabled: false
```

###### `sizeByBreakpoint`

Optional width/height constraints per breakpoint. Modes: `fillParent` (stretch), `fitContent` (intrinsic), `static` (fixed length via `widthStatic`/`heightStatic` + unit), `ratio` (percent of the other axis via `widthRatio`/`heightRatio`).

`static` uses `widthStaticUnit` / `heightStaticUnit`: `px`, `vw`, `vh`, `vmin`, or `vmax` (default `px`). Example full-page background: `widthStatic: 100`, `widthStaticUnit: "vw"`, `heightStatic: 100`, `heightStaticUnit: "vh"` with fixed positioning and `pointerEvents: "none"`. `ratio` values are percentages of the opposite axis. `fillParent` and `fitContent` take no numeric unit.

```
sizeByBreakpoint: {
  desktop: {
    widthMode: "static",
    widthStatic: 100,
    widthStaticUnit: "vw",
    heightMode: "static",
    heightStatic: 100,
    heightStaticUnit: "vh"
  }
}
```

###### `overflow`

CSS overflow on the decoration frame.

Options: `visible`, `hidden`, `auto`, `clip`

```
overflow: "hidden"
```

###### `pointerEvents`

Whether the decoration frame receives pointer events. Use `none` for full-page decorative backgrounds so clicks pass through.

Options: `auto`, `none`

```
pointerEvents: "auto"
```

##### Position

###### `positionEnabled`

Enables absolute/relative positioning overlays.

```
positionEnabled: false
```

###### `positionByBreakpoint`

Positioning overlays per breakpoint (`static`, `relative`, `absolute`, `fixed`, `sticky`) with optional offsets in pixels (`top`, `right`, `bottom`, `left`).

```
positionByBreakpoint: {
  desktop: { position: "relative", top: 0, left: 0 }
}
```

##### Background

###### `backgroundEnabled`

Enables background fill, gradient, or image.

```
backgroundEnabled: true
```

###### `backgroundWidth`

Background span: page column or full viewport bleed.

Options: `page`, `full`

```
backgroundWidth: "page"
```

###### `backgroundKind`

Solid color, gradient, image, muted autoplay video, or canvas animation (particles / reactive grid).

Options: `solid`, `gradient`, `image`, `video`, `animation`

```
backgroundKind: "solid"
```

###### `backgroundColorLight`

Solid background color in light theme.

```
backgroundColorLight: "#ffffff"
```

###### `backgroundColorDark`

Solid background color in dark theme.

```
backgroundColorDark: "#111827"
```

###### `gradientType`

Linear, radial, or conic gradient when `backgroundKind` is `gradient`.

Options: `linear`, `radial`, `conic`

```
gradientType: "linear"
```

###### `gradientAngle`

Unit: `deg`

Linear gradient direction or conic start angle in degrees when `backgroundKind` is `gradient`.

```
gradientAngle: 135
```

###### `gradientColors`

Gradient stops with light/dark pairs and segment offsets (CSS % is the running sum).

```
gradientColors: [
  { light: "#2563eb", dark: "#1e3a8a", offset: 20 },
  { light: "#93c5fd", dark: "#1e40af", offset: 80 }
]
```

###### `backgroundImageSrc`

Background image source when `backgroundKind` is `image`.

```
backgroundImageSrc: "https://cdn.example/bg.jpg"
```

###### `backgroundImageMode`

How the background image is sized.

Options: `cover`, `contain`, `repeat`

```
backgroundImageMode: "cover"
```

###### `backgroundRepeatSize`

Unit: `px`

Tile size in pixels when background image mode is `repeat`.

```
backgroundRepeatSize: 64
```

###### `backgroundPosition`

CSS background-position value.

```
backgroundPosition: "center"
```

###### `backgroundMotionEnabled`

Seamless pan (and optional rotate) for image backgrounds.

```
backgroundMotionEnabled: true
```

###### `backgroundMotionDirectionDeg`

Unit: `deg`

Pan direction in degrees (0 = right).

```
backgroundMotionDirectionDeg: 0
```

###### `backgroundMotionSpeed`

Relative pan speed for seamless cycling.

```
backgroundMotionSpeed: 20
```

###### `backgroundMotionRotateDegPerSec`

Unit: `deg`

Continuous rotation speed in degrees per second (0 = off).

```
backgroundMotionRotateDegPerSec: 0
```

###### `backgroundVideoSrc`

Video URL when `backgroundKind` is `video`. Always muted, autoplay, plays inline; never captures focus.

```
backgroundVideoSrc: "https://cdn.example/bg.mp4"
```

###### `backgroundVideoFit`

`cover` / `fill` use object-fit; `repeat` tiles frames on canvas.

Options: `cover`, `fill`, `repeat`

```
backgroundVideoFit: "cover"
```

###### `backgroundVideoLoop`

Loop the background video (default true).

```
backgroundVideoLoop: true
```

###### `backgroundAnimationMode`

Particle field or reactive grid (filled cells or continuous outlines) when `backgroundKind` is `animation`.

Options: `particle`, `reactiveGrid`

```
backgroundAnimationMode: "particle"
```

###### `backgroundAnimShape`

Built-in shape or custom SVG for particles/grid cells.

Options: `circle`, `square`, `roundedSquare`, `triangle`, `diamond`, `hexagon`, `star`, `cross`, `svg`

```
backgroundAnimShape: "circle"
```

###### `backgroundAnimSvgSrc`

SVG URL when shape is `svg`.

```
backgroundAnimSvgSrc: "https://cdn.example/shape.svg"
```

###### `backgroundAnimColorMode`

`solid` tints shapes; `fromAsset` keeps SVG colors.

Options: `solid`, `fromAsset`

```
backgroundAnimColorMode: "solid"
```

###### `backgroundAnimSize`

Unit: `px`

Base particle or cell size in pixels.

```
backgroundAnimSize: 12
```

###### `backgroundAnimJitter`

Particle-only 0–1 randomization for count, size, lifetime, and speed.

```
backgroundAnimJitter: 0.2
```

###### `backgroundGridStyle`

Reactive grid rendering: filled `cells`, or `continuous` shape outlines tiled edge-to-edge into one connected lattice that ripples around the cursor. Ignored for `svg` shapes, which always render as cells.

Options: `cells`, `continuous`

```
backgroundGridStyle: "cells"
```

###### `backgroundGridHoverGrowLimitPct`

Unit: `%`

Maximum cell size change at the pointer. Positive values grow cells; negative values shrink them. A value of `50` reaches 150% scale after the configured reaction time.

```
backgroundGridHoverGrowLimitPct: 50
```

###### `backgroundGridHoverRotateLimitDeg`

Unit: `deg`

Maximum cell rotation at the pointer. Positive values rotate clockwise; negative values rotate counterclockwise.

```
backgroundGridHoverRotateLimitDeg: 0
```

###### `backgroundGridReactionTimeSec`

Unit: `s`

Seconds for cells or the continuous-grid ripple to reach their configured hover limit, and to return after the pointer leaves.

```
backgroundGridReactionTimeSec: 1
```

##### Border

###### `borderEnabled`

Enables border color, style, width, and radius.

```
borderEnabled: false
```

###### `borderColorLight`

Border color in light theme.

```
borderColorLight: "#e5e7eb"
```

###### `borderColorDark`

Border color in dark theme.

```
borderColorDark: "#374151"
```

###### `borderStyle`

CSS border style.

Options: `solid`, `dashed`, `dotted`

```
borderStyle: "solid"
```

###### `borderWidth`

Unit: `token`

Border width token.

Options: `none`, `sm`, `md`, `lg`

```
borderWidth: "sm"
```

###### `borderRadius`

Unit: `token`

Border radius token.

Options: `none`, `sm`, `md`, `lg`, `xl`, `full`

```
borderRadius: "md"
```

##### Shadow

###### `shadowEnabled`

Enables box shadow values for light/dark themes.

```
shadowEnabled: false
```

###### `shadowValueLight`

CSS box-shadow value in light theme.

```
shadowValueLight: "0 8px 24px rgba(0, 0, 0, 0.12)"
```

###### `shadowValueDark`

CSS box-shadow value in dark theme.

```
shadowValueDark: "0 8px 24px rgba(0, 0, 0, 0.45)"
```

##### Motion & transform

###### `scrollAnimationEnabled`

Enables enter-on-scroll animation.

```
scrollAnimationEnabled: false
```

###### `scrollAnimationType`

Enter-on-scroll animation preset.

Options: `fadeIn`, `slideInBottom`, `slideInTop`, `slideInLeft`, `slideInRight`, `zoomIn`, `zoomOut`, `rotateIn`, `rotateOut`, `bounceIn`, `bounceOut`, `pulse`

```
scrollAnimationType: "fadeIn"
```

###### `scrollAnimationDuration`

Unit: `ms`

Animation duration in milliseconds.

```
scrollAnimationDuration: 600
```

###### `scrollAnimationDelay`

Unit: `ms`

Animation delay in milliseconds.

```
scrollAnimationDelay: 0
```

###### `cursorTiltEnabled`

Tilts the block slightly toward the pointer.

```
cursorTiltEnabled: false
```

###### `cursorTiltIntensity`

Strength of the cursor tilt effect.

```
cursorTiltIntensity: 8
```

###### `transformEnabled`

Enables CSS transform controls.

```
transformEnabled: false
```

###### `transformRotateX`

Unit: `deg`

Rotation around the X axis in degrees.

```
transformRotateX: 0
```

###### `transformRotateY`

Unit: `deg`

Rotation around the Y axis in degrees.

```
transformRotateY: 0
```

###### `transformRotateZ`

Unit: `deg`

Rotation around the Z axis in degrees.

```
transformRotateZ: 0
```

###### `transformTranslateX`

Unit: `px`

Horizontal translation in pixels.

```
transformTranslateX: 0
```

###### `transformTranslateY`

Unit: `px`

Vertical translation in pixels.

```
transformTranslateY: 0
```

###### `transformTranslateZ`

Unit: `px`

Depth translation in pixels.

```
transformTranslateZ: 0
```

###### `transformScale`

Unit: `ratio`

Uniform scale factor (unitless).

```
transformScale: 1
```

###### `transformPerspective`

Unit: `px`

CSS perspective distance in pixels.

```
transformPerspective: 800
```

##### Advanced

###### `decorationBySelector`

Advanced: apply decoration token overlays for `hover`, `active`, and `focus`. Missing overlay keys inherit the default flat props.

```
decorationBySelector: {
  hover: { backgroundColorLight: "#f3f4f6" }
}
```

###### `clipboard`

_Editor-only control — does not persist its own value._

Editor-only copy/paste helpers for block props.

```
// Editor-only — does not persist a stored value
```

<details><summary>Default props</summary>

```json
{
  "showOnBreakpoints": {},
  "showOnLocales": {},
  "authVisibility": "all",
  "routeLockVisibility": "all",
  "roleVisibility": [],
  "entryActionVisibility": "all",
  "queryPageVisibility": "all",
  "customizeEnabled": false,
  "padding": "none",
  "paddingEnabled": false,
  "sizeByBreakpoint": {},
  "marginsEnabled": false,
  "positionEnabled": false,
  "positionByBreakpoint": {},
  "backgroundEnabled": false,
  "backgroundWidth": "page",
  "backgroundKind": "solid",
  "backgroundColorLight": "",
  "backgroundColorDark": "",
  "gradientAngle": 180,
  "gradientType": "linear",
  "gradientColors": [
    {
      "light": "",
      "dark": "",
      "offset": 50
    },
    {
      "light": "",
      "dark": "",
      "offset": 50
    }
  ],
  "gradientColor1Light": "",
  "gradientColor1Dark": "",
  "gradientColor2Light": "",
  "gradientColor2Dark": "",
  "backgroundImageSrc": "",
  "backgroundImageMode": "cover",
  "backgroundRepeatSize": 100,
  "backgroundPosition": "center",
  "backgroundMotionEnabled": false,
  "backgroundMotionDirectionDeg": 0,
  "backgroundMotionSpeed": 20,
  "backgroundMotionRotateDegPerSec": 0,
  "backgroundVideoSrc": "",
  "backgroundVideoFit": "cover",
  "backgroundVideoLoop": true,
  "backgroundVideoRepeatSize": 100,
  "backgroundAnimationMode": "particle",
  "backgroundAnimShape": "circle",
  "backgroundAnimSvgSrc": "",
  "backgroundAnimColorMode": "solid",
  "backgroundAnimColorLight": "#ffffff88",
  "backgroundAnimColorDark": "#ffffff66",
  "backgroundAnimSize": 12,
  "backgroundAnimJitter": 0.2,
  "backgroundParticleCount": 40,
  "backgroundParticleLifetimeSec": 4,
  "backgroundParticleSpeed": 40,
  "backgroundParticleAnimType": "fade",
  "backgroundParticleFromSide": "left",
  "backgroundParticleToSide": "right",
  "backgroundGridStyle": "cells",
  "backgroundGridMotionDirectionDeg": 0,
  "backgroundGridMotionSpeed": 0,
  "backgroundGridRotateDegPerSec": 0,
  "backgroundGridHoverGrowLimitPct": 50,
  "backgroundGridHoverRotateLimitDeg": 0,
  "backgroundGridReactionTimeSec": 1,
  "backgroundGridHoverGrow": true,
  "backgroundGridHoverRotate": false,
  "backgroundGridHoverColor": false,
  "backgroundGridHoverColorLight": "#ffffff55",
  "backgroundGridHoverColorDark": "#ffffff33",
  "backgroundGridReactionSpeed": 1,
  "pointerEvents": "auto",
  "borderEnabled": false,
  "borderStyle": "solid",
  "borderColorLight": "",
  "borderColorDark": "",
  "shadowEnabled": false,
  "shadowValueLight": "",
  "shadowValueDark": "",
  "scrollAnimationEnabled": false,
  "scrollAnimationType": "fadeIn",
  "scrollAnimationDuration": 600,
  "scrollAnimationDelay": 0,
  "cursorTiltEnabled": false,
  "cursorTiltIntensity": 12,
  "transformEnabled": false,
  "transformRotateX": 0,
  "transformRotateY": 0,
  "transformRotateZ": 0,
  "transformTranslateX": 0,
  "transformTranslateY": 0,
  "transformTranslateZ": 0,
  "transformScale": 1,
  "decorationBySelector": {},
  "text": "Button",
  "icon": "none",
  "textAlign": "left",
  "fontSize": 18,
  "fontWeight": 600,
  "fontFamily": "theme-heading",
  "italic": false,
  "action": "navigate",
  "openInNewTab": false,
  "copiedText": "Copied",
  "socialNetwork": "whatsapp",
  "returnUrl": "/",
  "unreadBadge": true,
  "textColorLight": "",
  "textColorDark": "",
  "textColorHoverLight": "",
  "textColorHoverDark": "",
  "textColorActiveLight": "",
  "textColorActiveDark": ""
}
```

</details>

### `SingleImage`

Image block

#### Fields

##### Media

###### `src`

Image source (uploaded file URL or remote URL).

```
src: "https://cdn.example/hero.jpg"
```

##### Visibility

###### `showOnBreakpoints`

Per-breakpoint visibility. Set a breakpoint to `false` to hide the block on that viewport. Missing keys default to visible.

```
showOnBreakpoints: { mobile: false }
```

###### `showOnLocales`

Limit which website locales show the block. Empty / missing means all enabled locales. Set a locale to `false` to hide.

```
showOnLocales: { tr: false }
```

###### `authVisibility`

Who can see the block based on website sign-in state.

Options: `all`, `authenticated`, `anonymous`

```
authVisibility: "authenticated"
```

###### `routeLockVisibility`

On locked object routes, show always, only when unlocked, or only when locked.

Options: `all`, `when_unlocked`, `when_locked`

```
routeLockVisibility: "all"
```

###### `roleVisibility`

Optional list of website user role labels. Empty means all roles. Matching is case-sensitive.

```
roleVisibility: ["moderator"]
```

###### `entryActionVisibility`

Object-component only: show when the current entry exposes matching actions.

Options: `all`, `canUpdate`, `canDelete`

```
entryActionVisibility: "all"
```

###### `queryPageVisibility`

Optional: limit list blocks to the first query page only.

Options: `all`, `first_page_only`

```
queryPageVisibility: "all"
```

##### Spacing & sizing

###### `customizeEnabled`

Enables the decoration controls below in the editor.

```
customizeEnabled: true
```

###### `paddingEnabled`

Turns padding controls on for this block.

```
paddingEnabled: true
```

###### `padding`

Unit: `token`

Theme spacing token applied as padding. Tokens let site owners customize spacing while blocks continue to share a consistent design language.

Options: `none`, `xs`, `sm`, `md`, `lg`, `xl`

```
padding: "md"
```

###### `paddingByBreakpoint`

Unit: `token`

Theme spacing token per breakpoint. Use this when the block needs different, but still theme-consistent, spacing at different viewport sizes.

```
paddingByBreakpoint: { desktop: "md", mobile: "sm" }
```

###### `marginsEnabled`

Turns margin controls on (configured via size/position maps).

```
marginsEnabled: false
```

###### `sizeByBreakpoint`

Optional width/height constraints per breakpoint. Modes: `fillParent` (stretch), `fitContent` (intrinsic), `static` (fixed length via `widthStatic`/`heightStatic` + unit), `ratio` (percent of the other axis via `widthRatio`/`heightRatio`).

`static` uses `widthStaticUnit` / `heightStaticUnit`: `px`, `vw`, `vh`, `vmin`, or `vmax` (default `px`). Example full-page background: `widthStatic: 100`, `widthStaticUnit: "vw"`, `heightStatic: 100`, `heightStaticUnit: "vh"` with fixed positioning and `pointerEvents: "none"`. `ratio` values are percentages of the opposite axis. `fillParent` and `fitContent` take no numeric unit.

```
sizeByBreakpoint: {
  desktop: {
    widthMode: "static",
    widthStatic: 100,
    widthStaticUnit: "vw",
    heightMode: "static",
    heightStatic: 100,
    heightStaticUnit: "vh"
  }
}
```

###### `overflow`

CSS overflow on the decoration frame.

Options: `visible`, `hidden`, `auto`, `clip`

```
overflow: "hidden"
```

###### `pointerEvents`

Whether the decoration frame receives pointer events. Use `none` for full-page decorative backgrounds so clicks pass through.

Options: `auto`, `none`

```
pointerEvents: "auto"
```

##### Position

###### `positionEnabled`

Enables absolute/relative positioning overlays.

```
positionEnabled: false
```

###### `positionByBreakpoint`

Positioning overlays per breakpoint (`static`, `relative`, `absolute`, `fixed`, `sticky`) with optional offsets in pixels (`top`, `right`, `bottom`, `left`).

```
positionByBreakpoint: {
  desktop: { position: "relative", top: 0, left: 0 }
}
```

##### Background

###### `backgroundEnabled`

Enables background fill, gradient, or image.

```
backgroundEnabled: true
```

###### `backgroundWidth`

Background span: page column or full viewport bleed.

Options: `page`, `full`

```
backgroundWidth: "page"
```

###### `backgroundKind`

Solid color, gradient, image, muted autoplay video, or canvas animation (particles / reactive grid).

Options: `solid`, `gradient`, `image`, `video`, `animation`

```
backgroundKind: "solid"
```

###### `backgroundColorLight`

Solid background color in light theme.

```
backgroundColorLight: "#ffffff"
```

###### `backgroundColorDark`

Solid background color in dark theme.

```
backgroundColorDark: "#111827"
```

###### `gradientType`

Linear, radial, or conic gradient when `backgroundKind` is `gradient`.

Options: `linear`, `radial`, `conic`

```
gradientType: "linear"
```

###### `gradientAngle`

Unit: `deg`

Linear gradient direction or conic start angle in degrees when `backgroundKind` is `gradient`.

```
gradientAngle: 135
```

###### `gradientColors`

Gradient stops with light/dark pairs and segment offsets (CSS % is the running sum).

```
gradientColors: [
  { light: "#2563eb", dark: "#1e3a8a", offset: 20 },
  { light: "#93c5fd", dark: "#1e40af", offset: 80 }
]
```

###### `backgroundImageSrc`

Background image source when `backgroundKind` is `image`.

```
backgroundImageSrc: "https://cdn.example/bg.jpg"
```

###### `backgroundImageMode`

How the background image is sized.

Options: `cover`, `contain`, `repeat`

```
backgroundImageMode: "cover"
```

###### `backgroundRepeatSize`

Unit: `px`

Tile size in pixels when background image mode is `repeat`.

```
backgroundRepeatSize: 64
```

###### `backgroundPosition`

CSS background-position value.

```
backgroundPosition: "center"
```

###### `backgroundMotionEnabled`

Seamless pan (and optional rotate) for image backgrounds.

```
backgroundMotionEnabled: true
```

###### `backgroundMotionDirectionDeg`

Unit: `deg`

Pan direction in degrees (0 = right).

```
backgroundMotionDirectionDeg: 0
```

###### `backgroundMotionSpeed`

Relative pan speed for seamless cycling.

```
backgroundMotionSpeed: 20
```

###### `backgroundMotionRotateDegPerSec`

Unit: `deg`

Continuous rotation speed in degrees per second (0 = off).

```
backgroundMotionRotateDegPerSec: 0
```

###### `backgroundVideoSrc`

Video URL when `backgroundKind` is `video`. Always muted, autoplay, plays inline; never captures focus.

```
backgroundVideoSrc: "https://cdn.example/bg.mp4"
```

###### `backgroundVideoFit`

`cover` / `fill` use object-fit; `repeat` tiles frames on canvas.

Options: `cover`, `fill`, `repeat`

```
backgroundVideoFit: "cover"
```

###### `backgroundVideoLoop`

Loop the background video (default true).

```
backgroundVideoLoop: true
```

###### `backgroundAnimationMode`

Particle field or reactive grid (filled cells or continuous outlines) when `backgroundKind` is `animation`.

Options: `particle`, `reactiveGrid`

```
backgroundAnimationMode: "particle"
```

###### `backgroundAnimShape`

Built-in shape or custom SVG for particles/grid cells.

Options: `circle`, `square`, `roundedSquare`, `triangle`, `diamond`, `hexagon`, `star`, `cross`, `svg`

```
backgroundAnimShape: "circle"
```

###### `backgroundAnimSvgSrc`

SVG URL when shape is `svg`.

```
backgroundAnimSvgSrc: "https://cdn.example/shape.svg"
```

###### `backgroundAnimColorMode`

`solid` tints shapes; `fromAsset` keeps SVG colors.

Options: `solid`, `fromAsset`

```
backgroundAnimColorMode: "solid"
```

###### `backgroundAnimSize`

Unit: `px`

Base particle or cell size in pixels.

```
backgroundAnimSize: 12
```

###### `backgroundAnimJitter`

Particle-only 0–1 randomization for count, size, lifetime, and speed.

```
backgroundAnimJitter: 0.2
```

###### `backgroundGridStyle`

Reactive grid rendering: filled `cells`, or `continuous` shape outlines tiled edge-to-edge into one connected lattice that ripples around the cursor. Ignored for `svg` shapes, which always render as cells.

Options: `cells`, `continuous`

```
backgroundGridStyle: "cells"
```

###### `backgroundGridHoverGrowLimitPct`

Unit: `%`

Maximum cell size change at the pointer. Positive values grow cells; negative values shrink them. A value of `50` reaches 150% scale after the configured reaction time.

```
backgroundGridHoverGrowLimitPct: 50
```

###### `backgroundGridHoverRotateLimitDeg`

Unit: `deg`

Maximum cell rotation at the pointer. Positive values rotate clockwise; negative values rotate counterclockwise.

```
backgroundGridHoverRotateLimitDeg: 0
```

###### `backgroundGridReactionTimeSec`

Unit: `s`

Seconds for cells or the continuous-grid ripple to reach their configured hover limit, and to return after the pointer leaves.

```
backgroundGridReactionTimeSec: 1
```

##### Border

###### `borderEnabled`

Enables border color, style, width, and radius.

```
borderEnabled: false
```

###### `borderColorLight`

Border color in light theme.

```
borderColorLight: "#e5e7eb"
```

###### `borderColorDark`

Border color in dark theme.

```
borderColorDark: "#374151"
```

###### `borderStyle`

CSS border style.

Options: `solid`, `dashed`, `dotted`

```
borderStyle: "solid"
```

###### `borderWidth`

Unit: `token`

Border width token.

Options: `none`, `sm`, `md`, `lg`

```
borderWidth: "sm"
```

###### `borderRadius`

Unit: `token`

Border radius token.

Options: `none`, `sm`, `md`, `lg`, `xl`, `full`

```
borderRadius: "md"
```

##### Shadow

###### `shadowEnabled`

Enables box shadow values for light/dark themes.

```
shadowEnabled: false
```

###### `shadowValueLight`

CSS box-shadow value in light theme.

```
shadowValueLight: "0 8px 24px rgba(0, 0, 0, 0.12)"
```

###### `shadowValueDark`

CSS box-shadow value in dark theme.

```
shadowValueDark: "0 8px 24px rgba(0, 0, 0, 0.45)"
```

##### Motion & transform

###### `scrollAnimationEnabled`

Enables enter-on-scroll animation.

```
scrollAnimationEnabled: false
```

###### `scrollAnimationType`

Enter-on-scroll animation preset.

Options: `fadeIn`, `slideInBottom`, `slideInTop`, `slideInLeft`, `slideInRight`, `zoomIn`, `zoomOut`, `rotateIn`, `rotateOut`, `bounceIn`, `bounceOut`, `pulse`

```
scrollAnimationType: "fadeIn"
```

###### `scrollAnimationDuration`

Unit: `ms`

Animation duration in milliseconds.

```
scrollAnimationDuration: 600
```

###### `scrollAnimationDelay`

Unit: `ms`

Animation delay in milliseconds.

```
scrollAnimationDelay: 0
```

###### `cursorTiltEnabled`

Tilts the block slightly toward the pointer.

```
cursorTiltEnabled: false
```

###### `cursorTiltIntensity`

Strength of the cursor tilt effect.

```
cursorTiltIntensity: 8
```

###### `transformEnabled`

Enables CSS transform controls.

```
transformEnabled: false
```

###### `transformRotateX`

Unit: `deg`

Rotation around the X axis in degrees.

```
transformRotateX: 0
```

###### `transformRotateY`

Unit: `deg`

Rotation around the Y axis in degrees.

```
transformRotateY: 0
```

###### `transformRotateZ`

Unit: `deg`

Rotation around the Z axis in degrees.

```
transformRotateZ: 0
```

###### `transformTranslateX`

Unit: `px`

Horizontal translation in pixels.

```
transformTranslateX: 0
```

###### `transformTranslateY`

Unit: `px`

Vertical translation in pixels.

```
transformTranslateY: 0
```

###### `transformTranslateZ`

Unit: `px`

Depth translation in pixels.

```
transformTranslateZ: 0
```

###### `transformScale`

Unit: `ratio`

Uniform scale factor (unitless).

```
transformScale: 1
```

###### `transformPerspective`

Unit: `px`

CSS perspective distance in pixels.

```
transformPerspective: 800
```

##### Advanced

###### `decorationBySelector`

Advanced: apply decoration token overlays for `hover`, `active`, and `focus`. Missing overlay keys inherit the default flat props.

```
decorationBySelector: {
  hover: { backgroundColorLight: "#f3f4f6" }
}
```

###### `clipboard`

_Editor-only control — does not persist its own value._

Editor-only copy/paste helpers for block props.

```
// Editor-only — does not persist a stored value
```

<details><summary>Default props</summary>

```json
{
  "showOnBreakpoints": {},
  "showOnLocales": {},
  "authVisibility": "all",
  "routeLockVisibility": "all",
  "roleVisibility": [],
  "entryActionVisibility": "all",
  "queryPageVisibility": "all",
  "customizeEnabled": false,
  "padding": "none",
  "paddingEnabled": false,
  "sizeByBreakpoint": {},
  "marginsEnabled": false,
  "positionEnabled": false,
  "positionByBreakpoint": {},
  "backgroundEnabled": false,
  "backgroundWidth": "page",
  "backgroundKind": "solid",
  "backgroundColorLight": "",
  "backgroundColorDark": "",
  "gradientAngle": 180,
  "gradientType": "linear",
  "gradientColors": [
    {
      "light": "",
      "dark": "",
      "offset": 50
    },
    {
      "light": "",
      "dark": "",
      "offset": 50
    }
  ],
  "gradientColor1Light": "",
  "gradientColor1Dark": "",
  "gradientColor2Light": "",
  "gradientColor2Dark": "",
  "backgroundImageSrc": "",
  "backgroundImageMode": "cover",
  "backgroundRepeatSize": 100,
  "backgroundPosition": "center",
  "backgroundMotionEnabled": false,
  "backgroundMotionDirectionDeg": 0,
  "backgroundMotionSpeed": 20,
  "backgroundMotionRotateDegPerSec": 0,
  "backgroundVideoSrc": "",
  "backgroundVideoFit": "cover",
  "backgroundVideoLoop": true,
  "backgroundVideoRepeatSize": 100,
  "backgroundAnimationMode": "particle",
  "backgroundAnimShape": "circle",
  "backgroundAnimSvgSrc": "",
  "backgroundAnimColorMode": "solid",
  "backgroundAnimColorLight": "#ffffff88",
  "backgroundAnimColorDark": "#ffffff66",
  "backgroundAnimSize": 12,
  "backgroundAnimJitter": 0.2,
  "backgroundParticleCount": 40,
  "backgroundParticleLifetimeSec": 4,
  "backgroundParticleSpeed": 40,
  "backgroundParticleAnimType": "fade",
  "backgroundParticleFromSide": "left",
  "backgroundParticleToSide": "right",
  "backgroundGridStyle": "cells",
  "backgroundGridMotionDirectionDeg": 0,
  "backgroundGridMotionSpeed": 0,
  "backgroundGridRotateDegPerSec": 0,
  "backgroundGridHoverGrowLimitPct": 50,
  "backgroundGridHoverRotateLimitDeg": 0,
  "backgroundGridReactionTimeSec": 1,
  "backgroundGridHoverGrow": true,
  "backgroundGridHoverRotate": false,
  "backgroundGridHoverColor": false,
  "backgroundGridHoverColorLight": "#ffffff55",
  "backgroundGridHoverColorDark": "#ffffff33",
  "backgroundGridReactionSpeed": 1,
  "pointerEvents": "auto",
  "borderEnabled": false,
  "borderStyle": "solid",
  "borderColorLight": "",
  "borderColorDark": "",
  "shadowEnabled": false,
  "shadowValueLight": "",
  "shadowValueDark": "",
  "scrollAnimationEnabled": false,
  "scrollAnimationType": "fadeIn",
  "scrollAnimationDuration": 600,
  "scrollAnimationDelay": 0,
  "cursorTiltEnabled": false,
  "cursorTiltIntensity": 12,
  "transformEnabled": false,
  "transformRotateX": 0,
  "transformRotateY": 0,
  "transformRotateZ": 0,
  "transformTranslateX": 0,
  "transformTranslateY": 0,
  "transformTranslateZ": 0,
  "transformScale": 1,
  "decorationBySelector": {},
  "openInNewTab": false,
  "localeSpecificImages": false
}
```

</details>

### `VerticalSpacer`

Vertical spacer

#### Fields

##### Media

###### `height`

Unit: `px`

Height in pixels (spacer gap, media frame, and similar).

```
height: 48
```

##### Visibility

###### `showOnBreakpoints`

Per-breakpoint visibility. Set a breakpoint to `false` to hide the block on that viewport. Missing keys default to visible.

```
showOnBreakpoints: { mobile: false }
```

###### `showOnLocales`

Limit which website locales show the block. Empty / missing means all enabled locales. Set a locale to `false` to hide.

```
showOnLocales: { tr: false }
```

###### `authVisibility`

Who can see the block based on website sign-in state.

Options: `all`, `authenticated`, `anonymous`

```
authVisibility: "authenticated"
```

###### `routeLockVisibility`

On locked object routes, show always, only when unlocked, or only when locked.

Options: `all`, `when_unlocked`, `when_locked`

```
routeLockVisibility: "all"
```

###### `roleVisibility`

Optional list of website user role labels. Empty means all roles. Matching is case-sensitive.

```
roleVisibility: ["moderator"]
```

###### `entryActionVisibility`

Object-component only: show when the current entry exposes matching actions.

Options: `all`, `canUpdate`, `canDelete`

```
entryActionVisibility: "all"
```

###### `queryPageVisibility`

Optional: limit list blocks to the first query page only.

Options: `all`, `first_page_only`

```
queryPageVisibility: "all"
```

##### Spacing & sizing

###### `customizeEnabled`

Enables the decoration controls below in the editor.

```
customizeEnabled: true
```

###### `paddingEnabled`

Turns padding controls on for this block.

```
paddingEnabled: true
```

###### `padding`

Unit: `token`

Theme spacing token applied as padding. Tokens let site owners customize spacing while blocks continue to share a consistent design language.

Options: `none`, `xs`, `sm`, `md`, `lg`, `xl`

```
padding: "md"
```

###### `paddingByBreakpoint`

Unit: `token`

Theme spacing token per breakpoint. Use this when the block needs different, but still theme-consistent, spacing at different viewport sizes.

```
paddingByBreakpoint: { desktop: "md", mobile: "sm" }
```

###### `marginsEnabled`

Turns margin controls on (configured via size/position maps).

```
marginsEnabled: false
```

###### `sizeByBreakpoint`

Optional width/height constraints per breakpoint. Modes: `fillParent` (stretch), `fitContent` (intrinsic), `static` (fixed length via `widthStatic`/`heightStatic` + unit), `ratio` (percent of the other axis via `widthRatio`/`heightRatio`).

`static` uses `widthStaticUnit` / `heightStaticUnit`: `px`, `vw`, `vh`, `vmin`, or `vmax` (default `px`). Example full-page background: `widthStatic: 100`, `widthStaticUnit: "vw"`, `heightStatic: 100`, `heightStaticUnit: "vh"` with fixed positioning and `pointerEvents: "none"`. `ratio` values are percentages of the opposite axis. `fillParent` and `fitContent` take no numeric unit.

```
sizeByBreakpoint: {
  desktop: {
    widthMode: "static",
    widthStatic: 100,
    widthStaticUnit: "vw",
    heightMode: "static",
    heightStatic: 100,
    heightStaticUnit: "vh"
  }
}
```

###### `overflow`

CSS overflow on the decoration frame.

Options: `visible`, `hidden`, `auto`, `clip`

```
overflow: "hidden"
```

###### `pointerEvents`

Whether the decoration frame receives pointer events. Use `none` for full-page decorative backgrounds so clicks pass through.

Options: `auto`, `none`

```
pointerEvents: "auto"
```

##### Position

###### `positionEnabled`

Enables absolute/relative positioning overlays.

```
positionEnabled: false
```

###### `positionByBreakpoint`

Positioning overlays per breakpoint (`static`, `relative`, `absolute`, `fixed`, `sticky`) with optional offsets in pixels (`top`, `right`, `bottom`, `left`).

```
positionByBreakpoint: {
  desktop: { position: "relative", top: 0, left: 0 }
}
```

##### Background

###### `backgroundEnabled`

Enables background fill, gradient, or image.

```
backgroundEnabled: true
```

###### `backgroundWidth`

Background span: page column or full viewport bleed.

Options: `page`, `full`

```
backgroundWidth: "page"
```

###### `backgroundKind`

Solid color, gradient, image, muted autoplay video, or canvas animation (particles / reactive grid).

Options: `solid`, `gradient`, `image`, `video`, `animation`

```
backgroundKind: "solid"
```

###### `backgroundColorLight`

Solid background color in light theme.

```
backgroundColorLight: "#ffffff"
```

###### `backgroundColorDark`

Solid background color in dark theme.

```
backgroundColorDark: "#111827"
```

###### `gradientType`

Linear, radial, or conic gradient when `backgroundKind` is `gradient`.

Options: `linear`, `radial`, `conic`

```
gradientType: "linear"
```

###### `gradientAngle`

Unit: `deg`

Linear gradient direction or conic start angle in degrees when `backgroundKind` is `gradient`.

```
gradientAngle: 135
```

###### `gradientColors`

Gradient stops with light/dark pairs and segment offsets (CSS % is the running sum).

```
gradientColors: [
  { light: "#2563eb", dark: "#1e3a8a", offset: 20 },
  { light: "#93c5fd", dark: "#1e40af", offset: 80 }
]
```

###### `backgroundImageSrc`

Background image source when `backgroundKind` is `image`.

```
backgroundImageSrc: "https://cdn.example/bg.jpg"
```

###### `backgroundImageMode`

How the background image is sized.

Options: `cover`, `contain`, `repeat`

```
backgroundImageMode: "cover"
```

###### `backgroundRepeatSize`

Unit: `px`

Tile size in pixels when background image mode is `repeat`.

```
backgroundRepeatSize: 64
```

###### `backgroundPosition`

CSS background-position value.

```
backgroundPosition: "center"
```

###### `backgroundMotionEnabled`

Seamless pan (and optional rotate) for image backgrounds.

```
backgroundMotionEnabled: true
```

###### `backgroundMotionDirectionDeg`

Unit: `deg`

Pan direction in degrees (0 = right).

```
backgroundMotionDirectionDeg: 0
```

###### `backgroundMotionSpeed`

Relative pan speed for seamless cycling.

```
backgroundMotionSpeed: 20
```

###### `backgroundMotionRotateDegPerSec`

Unit: `deg`

Continuous rotation speed in degrees per second (0 = off).

```
backgroundMotionRotateDegPerSec: 0
```

###### `backgroundVideoSrc`

Video URL when `backgroundKind` is `video`. Always muted, autoplay, plays inline; never captures focus.

```
backgroundVideoSrc: "https://cdn.example/bg.mp4"
```

###### `backgroundVideoFit`

`cover` / `fill` use object-fit; `repeat` tiles frames on canvas.

Options: `cover`, `fill`, `repeat`

```
backgroundVideoFit: "cover"
```

###### `backgroundVideoLoop`

Loop the background video (default true).

```
backgroundVideoLoop: true
```

###### `backgroundAnimationMode`

Particle field or reactive grid (filled cells or continuous outlines) when `backgroundKind` is `animation`.

Options: `particle`, `reactiveGrid`

```
backgroundAnimationMode: "particle"
```

###### `backgroundAnimShape`

Built-in shape or custom SVG for particles/grid cells.

Options: `circle`, `square`, `roundedSquare`, `triangle`, `diamond`, `hexagon`, `star`, `cross`, `svg`

```
backgroundAnimShape: "circle"
```

###### `backgroundAnimSvgSrc`

SVG URL when shape is `svg`.

```
backgroundAnimSvgSrc: "https://cdn.example/shape.svg"
```

###### `backgroundAnimColorMode`

`solid` tints shapes; `fromAsset` keeps SVG colors.

Options: `solid`, `fromAsset`

```
backgroundAnimColorMode: "solid"
```

###### `backgroundAnimSize`

Unit: `px`

Base particle or cell size in pixels.

```
backgroundAnimSize: 12
```

###### `backgroundAnimJitter`

Particle-only 0–1 randomization for count, size, lifetime, and speed.

```
backgroundAnimJitter: 0.2
```

###### `backgroundGridStyle`

Reactive grid rendering: filled `cells`, or `continuous` shape outlines tiled edge-to-edge into one connected lattice that ripples around the cursor. Ignored for `svg` shapes, which always render as cells.

Options: `cells`, `continuous`

```
backgroundGridStyle: "cells"
```

###### `backgroundGridHoverGrowLimitPct`

Unit: `%`

Maximum cell size change at the pointer. Positive values grow cells; negative values shrink them. A value of `50` reaches 150% scale after the configured reaction time.

```
backgroundGridHoverGrowLimitPct: 50
```

###### `backgroundGridHoverRotateLimitDeg`

Unit: `deg`

Maximum cell rotation at the pointer. Positive values rotate clockwise; negative values rotate counterclockwise.

```
backgroundGridHoverRotateLimitDeg: 0
```

###### `backgroundGridReactionTimeSec`

Unit: `s`

Seconds for cells or the continuous-grid ripple to reach their configured hover limit, and to return after the pointer leaves.

```
backgroundGridReactionTimeSec: 1
```

##### Border

###### `borderEnabled`

Enables border color, style, width, and radius.

```
borderEnabled: false
```

###### `borderColorLight`

Border color in light theme.

```
borderColorLight: "#e5e7eb"
```

###### `borderColorDark`

Border color in dark theme.

```
borderColorDark: "#374151"
```

###### `borderStyle`

CSS border style.

Options: `solid`, `dashed`, `dotted`

```
borderStyle: "solid"
```

###### `borderWidth`

Unit: `token`

Border width token.

Options: `none`, `sm`, `md`, `lg`

```
borderWidth: "sm"
```

###### `borderRadius`

Unit: `token`

Border radius token.

Options: `none`, `sm`, `md`, `lg`, `xl`, `full`

```
borderRadius: "md"
```

##### Shadow

###### `shadowEnabled`

Enables box shadow values for light/dark themes.

```
shadowEnabled: false
```

###### `shadowValueLight`

CSS box-shadow value in light theme.

```
shadowValueLight: "0 8px 24px rgba(0, 0, 0, 0.12)"
```

###### `shadowValueDark`

CSS box-shadow value in dark theme.

```
shadowValueDark: "0 8px 24px rgba(0, 0, 0, 0.45)"
```

##### Motion & transform

###### `scrollAnimationEnabled`

Enables enter-on-scroll animation.

```
scrollAnimationEnabled: false
```

###### `scrollAnimationType`

Enter-on-scroll animation preset.

Options: `fadeIn`, `slideInBottom`, `slideInTop`, `slideInLeft`, `slideInRight`, `zoomIn`, `zoomOut`, `rotateIn`, `rotateOut`, `bounceIn`, `bounceOut`, `pulse`

```
scrollAnimationType: "fadeIn"
```

###### `scrollAnimationDuration`

Unit: `ms`

Animation duration in milliseconds.

```
scrollAnimationDuration: 600
```

###### `scrollAnimationDelay`

Unit: `ms`

Animation delay in milliseconds.

```
scrollAnimationDelay: 0
```

###### `cursorTiltEnabled`

Tilts the block slightly toward the pointer.

```
cursorTiltEnabled: false
```

###### `cursorTiltIntensity`

Strength of the cursor tilt effect.

```
cursorTiltIntensity: 8
```

###### `transformEnabled`

Enables CSS transform controls.

```
transformEnabled: false
```

###### `transformRotateX`

Unit: `deg`

Rotation around the X axis in degrees.

```
transformRotateX: 0
```

###### `transformRotateY`

Unit: `deg`

Rotation around the Y axis in degrees.

```
transformRotateY: 0
```

###### `transformRotateZ`

Unit: `deg`

Rotation around the Z axis in degrees.

```
transformRotateZ: 0
```

###### `transformTranslateX`

Unit: `px`

Horizontal translation in pixels.

```
transformTranslateX: 0
```

###### `transformTranslateY`

Unit: `px`

Vertical translation in pixels.

```
transformTranslateY: 0
```

###### `transformTranslateZ`

Unit: `px`

Depth translation in pixels.

```
transformTranslateZ: 0
```

###### `transformScale`

Unit: `ratio`

Uniform scale factor (unitless).

```
transformScale: 1
```

###### `transformPerspective`

Unit: `px`

CSS perspective distance in pixels.

```
transformPerspective: 800
```

##### Advanced

###### `decorationBySelector`

Advanced: apply decoration token overlays for `hover`, `active`, and `focus`. Missing overlay keys inherit the default flat props.

```
decorationBySelector: {
  hover: { backgroundColorLight: "#f3f4f6" }
}
```

###### `clipboard`

_Editor-only control — does not persist its own value._

Editor-only copy/paste helpers for block props.

```
// Editor-only — does not persist a stored value
```

<details><summary>Default props</summary>

```json
{
  "showOnBreakpoints": {},
  "showOnLocales": {},
  "authVisibility": "all",
  "routeLockVisibility": "all",
  "roleVisibility": [],
  "entryActionVisibility": "all",
  "queryPageVisibility": "all",
  "customizeEnabled": false,
  "padding": "none",
  "paddingEnabled": false,
  "sizeByBreakpoint": {},
  "marginsEnabled": false,
  "positionEnabled": false,
  "positionByBreakpoint": {},
  "backgroundEnabled": false,
  "backgroundWidth": "page",
  "backgroundKind": "solid",
  "backgroundColorLight": "",
  "backgroundColorDark": "",
  "gradientAngle": 180,
  "gradientType": "linear",
  "gradientColors": [
    {
      "light": "",
      "dark": "",
      "offset": 50
    },
    {
      "light": "",
      "dark": "",
      "offset": 50
    }
  ],
  "gradientColor1Light": "",
  "gradientColor1Dark": "",
  "gradientColor2Light": "",
  "gradientColor2Dark": "",
  "backgroundImageSrc": "",
  "backgroundImageMode": "cover",
  "backgroundRepeatSize": 100,
  "backgroundPosition": "center",
  "backgroundMotionEnabled": false,
  "backgroundMotionDirectionDeg": 0,
  "backgroundMotionSpeed": 20,
  "backgroundMotionRotateDegPerSec": 0,
  "backgroundVideoSrc": "",
  "backgroundVideoFit": "cover",
  "backgroundVideoLoop": true,
  "backgroundVideoRepeatSize": 100,
  "backgroundAnimationMode": "particle",
  "backgroundAnimShape": "circle",
  "backgroundAnimSvgSrc": "",
  "backgroundAnimColorMode": "solid",
  "backgroundAnimColorLight": "#ffffff88",
  "backgroundAnimColorDark": "#ffffff66",
  "backgroundAnimSize": 12,
  "backgroundAnimJitter": 0.2,
  "backgroundParticleCount": 40,
  "backgroundParticleLifetimeSec": 4,
  "backgroundParticleSpeed": 40,
  "backgroundParticleAnimType": "fade",
  "backgroundParticleFromSide": "left",
  "backgroundParticleToSide": "right",
  "backgroundGridStyle": "cells",
  "backgroundGridMotionDirectionDeg": 0,
  "backgroundGridMotionSpeed": 0,
  "backgroundGridRotateDegPerSec": 0,
  "backgroundGridHoverGrowLimitPct": 50,
  "backgroundGridHoverRotateLimitDeg": 0,
  "backgroundGridReactionTimeSec": 1,
  "backgroundGridHoverGrow": true,
  "backgroundGridHoverRotate": false,
  "backgroundGridHoverColor": false,
  "backgroundGridHoverColorLight": "#ffffff55",
  "backgroundGridHoverColorDark": "#ffffff33",
  "backgroundGridReactionSpeed": 1,
  "pointerEvents": "auto",
  "borderEnabled": false,
  "borderStyle": "solid",
  "borderColorLight": "",
  "borderColorDark": "",
  "shadowEnabled": false,
  "shadowValueLight": "",
  "shadowValueDark": "",
  "scrollAnimationEnabled": false,
  "scrollAnimationType": "fadeIn",
  "scrollAnimationDuration": 600,
  "scrollAnimationDelay": 0,
  "cursorTiltEnabled": false,
  "cursorTiltIntensity": 12,
  "transformEnabled": false,
  "transformRotateX": 0,
  "transformRotateY": 0,
  "transformRotateZ": 0,
  "transformTranslateX": 0,
  "transformTranslateY": 0,
  "transformTranslateZ": 0,
  "transformScale": 1,
  "decorationBySelector": {}
}
```

</details>

### `EmailDivider`

Divider

_No documented fields._
