datocms-plugin-media-layouts 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +288 -0
- package/dist/assets/index-BrvH3ARS.css +1 -0
- package/dist/assets/index-C4_K7KwS.js +56 -0
- package/dist/index.html +16 -0
- package/dist/robots.txt +3 -0
- package/docs/.gitkeep +0 -0
- package/package.json +43 -0
package/README.md
ADDED
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# Media Layouts
|
|
2
|
+
|
|
3
|
+
A DatoCMS plugin that extends JSON fields to allow editors to select assets with precise layout configuration including aspect ratios and output widths. Ideal for content that requires specific rendering dimensions across responsive breakpoints.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Self-contained data**: Stores URL, filename, and all metadata directly in JSON—no additional API calls needed
|
|
10
|
+
- **Three operational modes**: Single asset, multiple assets (gallery), or predefined layout slots
|
|
11
|
+
- **Aspect ratio control**: 9 presets plus custom ratios for precise cropping
|
|
12
|
+
- **Width presets**: Original (max) plus 320px mobile to 4K resolution
|
|
13
|
+
- **Focal point support**: Preserves focal point data from DatoCMS media library
|
|
14
|
+
- **Metadata editing**: Edit alt text, title, and focal point directly from the field
|
|
15
|
+
- **Layout mode**: Define grid-based slot configurations with required fields
|
|
16
|
+
- **Automatic height calculation**: Heights computed from width and aspect ratio for easy imgix integration
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
1. Go to **Settings > Plugins** in your DatoCMS project
|
|
21
|
+
2. Click **Add new plugin**
|
|
22
|
+
3. Search for "Media Layouts" or install from URL:
|
|
23
|
+
```
|
|
24
|
+
https://github.com/datocms/plugins/media-layouts
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Configuration
|
|
28
|
+
|
|
29
|
+
### Global Settings
|
|
30
|
+
|
|
31
|
+
Configure default values that apply to all fields using this plugin:
|
|
32
|
+
|
|
33
|
+
| Setting | Description | Default |
|
|
34
|
+
|---------|-------------|---------|
|
|
35
|
+
| Default Aspect Ratio | Applied to new assets when no field override exists | 16:9 |
|
|
36
|
+
| Default Width | Applied to new assets when no field override exists | 1920px |
|
|
37
|
+
|
|
38
|
+
### Field Configuration
|
|
39
|
+
|
|
40
|
+
When adding the plugin to a JSON field, you must select a mode:
|
|
41
|
+
|
|
42
|
+
#### Single Asset Mode
|
|
43
|
+
|
|
44
|
+
Select one image with layout controls. Stores a single `MediaLayoutItem` object.
|
|
45
|
+
|
|
46
|
+
#### Multiple Assets Mode (Gallery)
|
|
47
|
+
|
|
48
|
+
Select multiple images, each with independent layout settings. Stores an array of `MediaLayoutItem` objects.
|
|
49
|
+
|
|
50
|
+
#### Layout Mode (Predefined Slots)
|
|
51
|
+
|
|
52
|
+
Define a grid with named slots that editors fill with assets. Each slot has:
|
|
53
|
+
- **Label**: Descriptive name (e.g., "Hero Image", "Sidebar Thumbnail")
|
|
54
|
+
- **Aspect Ratio**: Fixed ratio for this slot
|
|
55
|
+
- **Width**: Fixed output width for this slot (including Original)
|
|
56
|
+
- **Required**: Whether the slot must be filled
|
|
57
|
+
|
|
58
|
+
Grid supports 1-4 columns and 1-6 rows.
|
|
59
|
+
|
|
60
|
+
### Field Overrides
|
|
61
|
+
|
|
62
|
+
For single/multiple modes, you can optionally override global defaults:
|
|
63
|
+
- Toggle "Override default aspect ratio" to set a field-specific ratio
|
|
64
|
+
- Toggle "Override default width" to set a field-specific width
|
|
65
|
+
|
|
66
|
+
## Aspect Ratio Options
|
|
67
|
+
|
|
68
|
+
| Value | Label | Use Case |
|
|
69
|
+
|-------|-------|----------|
|
|
70
|
+
| `original` | Original (no crop) | Preserve native dimensions |
|
|
71
|
+
| `16:9` | Widescreen | Video players, hero banners |
|
|
72
|
+
| `4:3` | Standard | Traditional TV format |
|
|
73
|
+
| `1:1` | Square | Social media, avatars |
|
|
74
|
+
| `3:2` | Photo | Standard photography |
|
|
75
|
+
| `2:3` | Portrait Photo | Vertical photography |
|
|
76
|
+
| `21:9` | Ultrawide | Cinematic banners |
|
|
77
|
+
| `9:16` | Portrait/Mobile | Stories, vertical video |
|
|
78
|
+
| `3:4` | Portrait Standard | Vertical content |
|
|
79
|
+
| `custom` | Custom... | Enter any ratio (e.g., `2.35:1`) |
|
|
80
|
+
|
|
81
|
+
## Width Presets
|
|
82
|
+
|
|
83
|
+
| Width | Label | Typical Use |
|
|
84
|
+
|-------|-------|-------------|
|
|
85
|
+
| `original` | Original (max) | Use native resolution |
|
|
86
|
+
| 320px | Mobile small | Feature phones |
|
|
87
|
+
| 640px | Mobile | Standard mobile |
|
|
88
|
+
| 768px | Tablet | Portrait tablets |
|
|
89
|
+
| 1024px | Tablet landscape | Landscape tablets |
|
|
90
|
+
| 1280px | Desktop small | Small laptops |
|
|
91
|
+
| 1920px | Full HD | Standard desktop |
|
|
92
|
+
| 2560px | 2K | High-resolution displays |
|
|
93
|
+
| 3840px | 4K | Ultra HD displays |
|
|
94
|
+
|
|
95
|
+
## Data Model
|
|
96
|
+
|
|
97
|
+
The plugin stores all asset data directly in the JSON field, including the URL. No additional API calls are needed to render images.
|
|
98
|
+
|
|
99
|
+
### Single Mode
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"uploadId": "abc123",
|
|
104
|
+
"url": "https://www.datocms-assets.com/12345/image.jpg",
|
|
105
|
+
"filename": "image.jpg",
|
|
106
|
+
"format": "jpg",
|
|
107
|
+
"size": 245000,
|
|
108
|
+
"alt": "A beautiful sunset",
|
|
109
|
+
"title": "Sunset at the beach",
|
|
110
|
+
"focalPoint": { "x": 0.5, "y": 0.3 },
|
|
111
|
+
"aspectRatio": "16:9",
|
|
112
|
+
"width": 1920,
|
|
113
|
+
"height": 1080,
|
|
114
|
+
"originalWidth": 4000,
|
|
115
|
+
"originalHeight": 3000
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Multiple Mode
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
[
|
|
123
|
+
{
|
|
124
|
+
"uploadId": "abc123",
|
|
125
|
+
"url": "https://www.datocms-assets.com/12345/photo1.jpg",
|
|
126
|
+
"filename": "photo1.jpg",
|
|
127
|
+
"format": "jpg",
|
|
128
|
+
"size": 180000,
|
|
129
|
+
"alt": "First image",
|
|
130
|
+
"title": null,
|
|
131
|
+
"focalPoint": null,
|
|
132
|
+
"aspectRatio": "1:1",
|
|
133
|
+
"width": 640,
|
|
134
|
+
"height": 640,
|
|
135
|
+
"originalWidth": 2000,
|
|
136
|
+
"originalHeight": 2000
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"uploadId": "def456",
|
|
140
|
+
"url": "https://www.datocms-assets.com/12345/photo2.png",
|
|
141
|
+
"filename": "photo2.png",
|
|
142
|
+
"format": "png",
|
|
143
|
+
"size": 320000,
|
|
144
|
+
"alt": "Second image",
|
|
145
|
+
"title": null,
|
|
146
|
+
"focalPoint": { "x": 0.3, "y": 0.5 },
|
|
147
|
+
"aspectRatio": "4:3",
|
|
148
|
+
"width": 1024,
|
|
149
|
+
"height": 768,
|
|
150
|
+
"originalWidth": 3000,
|
|
151
|
+
"originalHeight": 2000
|
|
152
|
+
}
|
|
153
|
+
]
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Layout Mode
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
[
|
|
160
|
+
{
|
|
161
|
+
"slotId": "hero",
|
|
162
|
+
"uploadId": "abc123",
|
|
163
|
+
"url": "https://www.datocms-assets.com/12345/hero.jpg",
|
|
164
|
+
"filename": "hero.jpg",
|
|
165
|
+
"format": "jpg",
|
|
166
|
+
"size": 450000,
|
|
167
|
+
"alt": "Hero banner",
|
|
168
|
+
"title": null,
|
|
169
|
+
"focalPoint": { "x": 0.5, "y": 0.5 },
|
|
170
|
+
"aspectRatio": "21:9",
|
|
171
|
+
"width": 1920,
|
|
172
|
+
"height": 823,
|
|
173
|
+
"originalWidth": 4000,
|
|
174
|
+
"originalHeight": 2000
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"slotId": "sidebar",
|
|
178
|
+
"uploadId": "def456",
|
|
179
|
+
"url": "https://www.datocms-assets.com/12345/sidebar.jpg",
|
|
180
|
+
"filename": "sidebar.jpg",
|
|
181
|
+
"format": "jpg",
|
|
182
|
+
"size": 85000,
|
|
183
|
+
"alt": "Sidebar image",
|
|
184
|
+
"title": null,
|
|
185
|
+
"focalPoint": null,
|
|
186
|
+
"aspectRatio": "1:1",
|
|
187
|
+
"width": 320,
|
|
188
|
+
"height": 320,
|
|
189
|
+
"originalWidth": 800,
|
|
190
|
+
"originalHeight": 800
|
|
191
|
+
}
|
|
192
|
+
]
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### TypeScript Types
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
type MediaLayoutItem = {
|
|
199
|
+
uploadId: string;
|
|
200
|
+
url: string;
|
|
201
|
+
filename: string;
|
|
202
|
+
format: string | null;
|
|
203
|
+
size: number;
|
|
204
|
+
alt: string | null;
|
|
205
|
+
title: string | null;
|
|
206
|
+
focalPoint: { x: number; y: number } | null;
|
|
207
|
+
aspectRatio: string;
|
|
208
|
+
customAspectRatio?: string; // When aspectRatio is "custom"
|
|
209
|
+
width: number | 'original';
|
|
210
|
+
height: number;
|
|
211
|
+
originalWidth: number | null;
|
|
212
|
+
originalHeight: number | null;
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
// Single mode value
|
|
216
|
+
type SingleFieldValue = MediaLayoutItem | null;
|
|
217
|
+
|
|
218
|
+
// Multiple mode value
|
|
219
|
+
type MultipleFieldValue = MediaLayoutItem[];
|
|
220
|
+
|
|
221
|
+
// Layout mode value
|
|
222
|
+
type SlotAssignment = MediaLayoutItem & { slotId: string };
|
|
223
|
+
type LayoutFieldValue = SlotAssignment[];
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Usage with imgix
|
|
227
|
+
|
|
228
|
+
The stored URL, width, height, and focal point data integrates directly with DatoCMS imgix:
|
|
229
|
+
|
|
230
|
+
```javascript
|
|
231
|
+
const { url, width, height, focalPoint, aspectRatio, originalWidth } = mediaLayoutItem;
|
|
232
|
+
|
|
233
|
+
// Build imgix parameters
|
|
234
|
+
const resolvedWidth = width === 'original' ? originalWidth : width;
|
|
235
|
+
const params = new URLSearchParams({
|
|
236
|
+
fit: aspectRatio === 'original' ? 'max' : 'crop',
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
if (resolvedWidth) {
|
|
240
|
+
params.set('w', resolvedWidth.toString());
|
|
241
|
+
}
|
|
242
|
+
if (height && resolvedWidth) {
|
|
243
|
+
params.set('h', height.toString());
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Add focal point if available
|
|
247
|
+
if (focalPoint && aspectRatio !== 'original') {
|
|
248
|
+
params.set('crop', 'focalpoint');
|
|
249
|
+
params.set('fp-x', focalPoint.x.toString());
|
|
250
|
+
params.set('fp-y', focalPoint.y.toString());
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const finalUrl = `${url}?${params.toString()}`;
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## Fetching Data
|
|
257
|
+
|
|
258
|
+
JSON fields return the complete JSON blob in GraphQL queries. Since the URL is stored directly, no additional API calls are needed:
|
|
259
|
+
|
|
260
|
+
```graphql
|
|
261
|
+
query {
|
|
262
|
+
blogPost {
|
|
263
|
+
heroImage # Returns the full MediaLayoutItem or array with URL included
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
The response contains everything needed to render images, including the base URL which you can combine with imgix parameters.
|
|
269
|
+
|
|
270
|
+
## Development
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
# Install dependencies
|
|
274
|
+
npm install
|
|
275
|
+
|
|
276
|
+
# Start development server
|
|
277
|
+
npm run dev
|
|
278
|
+
|
|
279
|
+
# Build for production
|
|
280
|
+
npm run build
|
|
281
|
+
|
|
282
|
+
# Type check
|
|
283
|
+
npx tsc -b
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## License
|
|
287
|
+
|
|
288
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@font-face{font-display:auto;font-family:colfax-web;font-style:normal;font-weight:700;src:url(https://use.typekit.net/af/522c51/00000000000000003b9acde6/27/l?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=n5&v=3) format("woff2"),url(https://use.typekit.net/af/522c51/00000000000000003b9acde6/27/d?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=n5&v=3) format("woff"),url(https://use.typekit.net/af/522c51/00000000000000003b9acde6/27/a?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=n5&v=3) format("opentype")}@font-face{font-display:auto;font-family:colfax-web;font-style:italic;font-weight:700;src:url(https://use.typekit.net/af/4e71b3/00000000000000003b9acde7/27/l?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=i5&v=3) format("woff2"),url(https://use.typekit.net/af/4e71b3/00000000000000003b9acde7/27/d?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=i5&v=3) format("woff"),url(https://use.typekit.net/af/4e71b3/00000000000000003b9acde7/27/a?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=i5&v=3) format("opentype")}@font-face{font-display:auto;font-family:colfax-web;font-style:normal;font-weight:500;src:url(https://use.typekit.net/af/522c51/00000000000000003b9acde6/27/l?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=n5&v=3) format("woff2"),url(https://use.typekit.net/af/522c51/00000000000000003b9acde6/27/d?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=n5&v=3) format("woff"),url(https://use.typekit.net/af/522c51/00000000000000003b9acde6/27/a?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=n5&v=3) format("opentype")}@font-face{font-display:auto;font-family:colfax-web;font-style:italic;font-weight:500;src:url(https://use.typekit.net/af/4e71b3/00000000000000003b9acde7/27/l?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=i5&v=3) format("woff2"),url(https://use.typekit.net/af/4e71b3/00000000000000003b9acde7/27/d?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=i5&v=3) format("woff"),url(https://use.typekit.net/af/4e71b3/00000000000000003b9acde7/27/a?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=i5&v=3) format("opentype")}@font-face{font-display:auto;font-family:colfax-web;font-style:normal;font-weight:400;src:url(https://use.typekit.net/af/bac079/00000000000000003b9acde4/27/l?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=n4&v=3) format("woff2"),url(https://use.typekit.net/af/bac079/00000000000000003b9acde4/27/d?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=n4&v=3) format("woff"),url(https://use.typekit.net/af/bac079/00000000000000003b9acde4/27/a?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=n4&v=3) format("opentype")}@font-face{font-display:auto;font-family:colfax-web;font-style:italic;font-weight:400;src:url(https://use.typekit.net/af/c1cc04/00000000000000003b9acde5/27/l?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=i4&v=3) format("woff2"),url(https://use.typekit.net/af/c1cc04/00000000000000003b9acde5/27/d?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=i4&v=3) format("woff"),url(https://use.typekit.net/af/c1cc04/00000000000000003b9acde5/27/a?primer=f592e0a4b9356877842506ce344308576437e4f677d7c9b78ca2162e6cad991a&fvd=i4&v=3) format("opentype")}html{font-size:16px;height:auto}body,html{margin:0;padding:0}._button_474wk_1{-webkit-appearance:none;-moz-appearance:none;background-color:transparent;border:0;border-radius:4px;box-sizing:border-box;color:var(--base-body-color);cursor:pointer;display:inline-block;font-family:inherit;font-weight:var(--font-weight-bold);line-height:inherit;opacity:1;text-decoration:none;transition:all .3s var(--material-ease);vertical-align:middle;white-space:nowrap}._button_474wk_1:focus,._button_474wk_1:hover{opacity:.8}._button_474wk_1:active{opacity:.7}._disabled_474wk_30{cursor:not-allowed}._buttonType-muted_474wk_34{background-color:var(--light-color);color:var(--accent-color)}._buttonType-muted_474wk_34._disabled_474wk_30{background-color:var(--light-bg-color);color:#0003}._buttonType-muted_474wk_34._disabled_474wk_30:active,._buttonType-muted_474wk_34._disabled_474wk_30:focus,._buttonType-muted_474wk_34._disabled_474wk_30:hover{color:#0003}._buttonType-primary_474wk_50{background-color:var(--accent-color);color:#fff}._buttonType-primary_474wk_50:active,._buttonType-primary_474wk_50:focus,._buttonType-primary_474wk_50:hover{color:#fff}._buttonType-primary_474wk_50._disabled_474wk_30{background-color:var(--disabled-bg-color);color:#0003}._buttonType-primary_474wk_50._disabled_474wk_30:active,._buttonType-primary_474wk_50._disabled_474wk_30:focus,._buttonType-primary_474wk_50._disabled_474wk_30:hover{color:#0003}._buttonType-negative_474wk_71,._buttonType-negative_474wk_71:active,._buttonType-negative_474wk_71:focus,._buttonType-negative_474wk_71:hover{background-color:var(--alert-color);color:#fff}._buttonType-negative_474wk_71._disabled_474wk_30{background-color:var(--disabled-bg-color);color:#0003}._buttonSize-xxs_474wk_88{font-size:1em;padding:.5em .8em}._buttonSize-xs_474wk_93{font-size:1em;padding:.6em .8em}._buttonSize-s_474wk_98{font-size:1em;padding:.7em 1em}._buttonSize-m_474wk_103{font-size:1.1em;padding:.7em 1em}._buttonSize-l_474wk_108{font-size:1.2em;padding:.7em 1em}._buttonSize-xl_474wk_113{font-size:1.2em;padding:1em}._fullWidth_474wk_118{display:block;text-align:center;width:100%}._button__leftIcon_474wk_124,._button__rightIcon_474wk_125{display:inline-block;line-height:.6;vertical-align:middle}._button__leftIcon_474wk_124 svg,._button__rightIcon_474wk_125 svg{fill:var(--accent-color)}._button__leftIcon_474wk_124{margin-right:.5em}._button__leftIcon_474wk_124:last-child{margin-right:0}._button__rightIcon_474wk_125{margin-left:.5em}._button__rightIcon_474wk_125:first-child{margin-left:0}._Button_1h1w1_1{justify-column:center;align-items:center;-webkit-appearance:none;-moz-appearance:none;background-color:#fff;border:0;border-right:1px solid var(--border-color);border:1px solid var(--border-color);border-left-width:0;box-sizing:border-box;color:var(--base-body-color);color:rgba(var(--base-body-color-rgb-components,.6));cursor:pointer;display:flex;font-family:inherit;font-size:inherit;line-height:inherit;padding:7px 13px}._Button_1h1w1_1:hover{background-color:var(--light-bg-color)}._Button_1h1w1_1 svg{fill:var(--light-body-color)}._Button--s_1h1w1_32{padding:3px 10px}._Button--disabled_1h1w1_36{color:var(--light-body-color);cursor:not-allowed}._Button--disabled_1h1w1_36:hover{background:#fff}._Button--selected_1h1w1_45{background-color:var(--accent-color);border-color:var(--accent-color);color:#fff}._Button--selected_1h1w1_45 svg{fill:#fff}._Button--selected_1h1w1_45:hover{background-color:var(--accent-color)}._Button--selected_1h1w1_45._Button--disabled_1h1w1_36,._Button--selected_1h1w1_45:hover{background-color:rgba(var(--accent-color-rgb-components),.8);border-color:rgba(var(--accent-color-rgb-components),.8)}._Button_1h1w1_1:first-child{border-left-width:1px;border-radius:4px 0 0 4px}._Button_1h1w1_1:last-child{border-radius:0 4px 4px 0}._Group_10mj4_1{align-items:stretch;background-color:#fff;display:flex;overflow:hidden}._themeVariables_ovgoa_1{--base-body-color:#34363a;--base-body-color-rgb-components:52,54,58;--light-body-color:#848484;--light-body-color-rgb-components:132,132,132;--placeholder-body-color:#c6c6c6;--placeholder-body-color-rgb-components:198,198,198;--light-bg-color:#f5f5f5;--light-bg-color-rgb-components:245,245,245;--lighter-bg-color:#f8f8f8;--lighter-bg-color-rgb-components:248,248,248;--disabled-bg-color:#ededed;--disabled-bg-color-rgb-components:237,237,237;--border-color:#f0f0f0;--border-color-rgb-components:240,240,240;--darker-border-color:#d7d7d7;--darker-border-color-rgb-components:215,215,215;--alert-color:#ff5e49;--alert-color-rgb-components:255,94,73;--warning-color:gold;--warning-color-rgb-components:255,215,0;--notice-color:#46d700;--notice-color-rgb-components:70,215,0;--warning-bg-color:#ffffe5;--warning-bg-color-rgb-components:255,255,229;--add-color:#4cb06d;--add-color-rgb-components:76,176,109;--remove-color:#eb576a;--remove-color-rgb-components:235,87,106;--base-font-family:"colfax-web","Roboto","Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;--monospaced-font-family:"Roboto Mono","Menlo","Bitstream Vera Sans Mono",Consolas,Courier,monospace;--font-weight-bold:500;--spacing-s:.375rem;--spacing-m:.75rem;--spacing-l:1.5rem;--spacing-xl:2.25rem;--spacing-xxl:3.75rem;--spacing-xxxl:6rem;--negative-spacing-s:-.375rem;--negative-spacing-m:-.75rem;--negative-spacing-l:-1.5rem;--negative-spacing-xl:-2.25rem;--negative-spacing-xxl:-3.75rem;--negative-spacing-xxxl:-6rem;--font-size-xxs:.6875rem;--font-size-xs:.75rem;--font-size-s:.875rem;--font-size-m:.9375rem;--font-size-l:1.0625rem;--font-size-xl:1.1875rem;--font-size-xxl:1.5625rem;--font-size-xxxl:1.875rem;--material-ease:cubic-bezier(.55,0,.1,1);--inertial-ease:cubic-bezier(.19,1,.22,1)}._canvas_ovgoa_68{-webkit-text-size-adjust:100%;text-rendering:optimizeLegibility;color:var(--base-body-color);font-family:var(--base-font-family);font-size:var(--font-size-m);line-height:1.5}._inspector_u6041_1{margin:var(--spacing-l) 0}._panel_u6041_5{border-bottom:1px solid var(--border-color)}._panelHandle_u6041_9{all:inherit;background:var(--light-bg-color);border:0;box-sizing:border-box;cursor:pointer;display:block;font-weight:var(--font-weight-bold);padding:5px 10px;width:100%}._panelHandle_u6041_9:hover{background:var(--lighter-bg-color)}._panelBody_u6041_25{border-left:1px solid var(--border-color);border-right:1px solid var(--border-color);padding:20px}._groupDescription_u6041_31{font-size:var(--font-size-s);line-height:1.2;margin-bottom:20px}._propertyGroup_u6041_37{border:1px solid var(--border-color);border-radius:5px}._propertyOrMethod_u6041_42{border-bottom:1px solid var(--border-color);line-height:1.2}._propertyOrMethod_u6041_42 p{margin:0}._propertyOrMethodBody_u6041_51{padding:15px}._propertyOrMethodExample_u6041_55{position:relative}._propertyOrMethodExample_u6041_55 pre{background:var(--light-bg-color);font-size:.8em;margin:0;max-height:240px;overflow:auto;padding:15px}._propertyOrMethodName_u6041_68{color:var(--light-body-color);display:block;font-family:var(--monospaced-font-family);font-size:.9em;font-weight:700;margin-bottom:5px;text-decoration:none}._propertyOrMethodName_u6041_68:hover{text-decoration:underline}._propertyOrMethodExampleActions_u6041_82{background:#fff;display:flex;padding:15px}._propertyOrMethodExampleActions_u6041_82>*{margin-right:10px}._fieldError_qi0xk_1{color:var(--alert-color);font-size:var(--font-size-xs);line-height:1.2;margin-top:var(--spacing-s)}._FieldGroup_uz9ju_1{display:block}._FieldGroup__item_uz9ju_5{display:block;margin-bottom:var(--spacing-l)}._FieldGroup__item_uz9ju_5:last-child{margin-bottom:0}._fieldHint_1avon_1{color:var(--light-body-color);font-size:var(--font-size-xs);line-height:1.2;margin-top:var(--spacing-s)}._fieldHint_1avon_1 a{color:inherit}._fieldHint_1avon_1 a:hover{text-decoration:none}._Form_5qspp_1,._Form__item_5qspp_5{display:block}._Form__item_5qspp_5:last-child{margin-bottom:0}._Form__item--default_5qspp_13{margin-bottom:var(--spacing-l)}._Form__item--condensed_5qspp_17{margin-bottom:var(--spacing-m)}._formLabel_tcjrv_1{align-items:center;color:var(--light-body-color);display:flex;margin-bottom:var(--spacing-s)}._formLabel_tcjrv_1:hover ._formLabel__code_tcjrv_8{opacity:1}._formLabel--error_tcjrv_14{color:var(--alert-color)}._formLabel__label_tcjrv_18{flex:1}._formLabel__code_tcjrv_8{font-family:var(--monospaced-font-family);font-size:.95em;opacity:0;position:absolute;transition:opacity .2s var(--material-ease)}._hotKey_1eko8_1{align-items:center;display:inline-flex;gap:15px}._label_1eko8_7{align-items:center;display:flex}._keys_1eko8_12{align-items:center;display:inline-flex;gap:4px}._hotKeyKey_1eko8_18{background:var(--light-color);border-radius:3px;padding:5px 8px}._Section_zh95u_1{position:relative}._Section--highlighted_zh95u_5:before{animation:_pageContentSectionHighligh_zh95u_1 4s ease-in-out .25s forwards;border-radius:4px;bottom:-20px;box-shadow:0 0 0 4px var(--accent-color);content:"";left:-30px;pointer-events:none;position:absolute;right:-30px;top:-20px;z-index:10}._Section__header_zh95u_19{margin-bottom:var(--spacing-l);margin-left:var(--negative-spacing-l);margin-right:var(--negative-spacing-l);position:relative}._Section__header_zh95u_19:before{background-color:var(--border-color);content:"";display:block;height:1px;left:0;position:absolute;right:0;top:50%;z-index:1}._Section__title_zh95u_38{align-items:center;background-color:#fff;display:inline-flex;font-size:var(--font-size-l);font-weight:var(--font-weight-bold);margin-left:var(--spacing-m);margin-right:var(--spacing-l);padding-left:var(--spacing-m);padding-right:var(--spacing-m);position:relative;z-index:2}._Section__arrow_zh95u_55{all:initial;align-self:stretch;cursor:pointer;margin-right:.3em;width:15px}._Section__arrow_zh95u_55:before{border-bottom:6px solid transparent;border-left:6px solid var(--base-body-color);border-top:6px solid transparent;content:"";height:0;left:14px;margin-top:-6px;position:absolute;top:50%;transform-origin:50% 50%;transition:transform .2s ease-out;width:0}._Section__arrow_zh95u_55:hover:before{opacity:.7}._Section__arrow--is-open_zh95u_82:before{transform:rotate(90deg)}@keyframes _pageContentSectionHighligh_zh95u_1{0%{box-shadow:0 0 0 4px var(--accent-color),0 0 0 4px rgba(var(--accent-color-rgb-components),.7)}15%{box-shadow:0 0 0 4px var(--accent-color),0 0 0 80px transparent}75%{box-shadow:0 0 0 4px var(--accent-color),0 0 0 80px transparent}to{box-shadow:0 0 0 4px transparent,0 0 0 80px transparent}}._SidebarPanel_4uwco_1{border-bottom:1px solid var(--border-color)}._SidebarPanel__header_4uwco_5{align-items:center;-webkit-appearance:none;-moz-appearance:none;background-color:#fff;background-color:var(--light-bg-color);border:0;box-sizing:border-box;color:var(--base-body-color);cursor:pointer;display:flex;font-family:inherit;font-size:inherit;line-height:inherit;padding:0;text-align:left;-webkit-user-select:none;user-select:none;width:100%}._SidebarPanel__header_4uwco_5:focus,._SidebarPanel__header_4uwco_5:hover{background-color:var(--lighter-bg-color)}._SidebarPanel__header__title_4uwco_30{flex:1;font-weight:500;padding:0 20px}._SidebarPanel__header__chevron_4uwco_36{align-items:center;display:flex;padding:13px 15px}._SidebarPanel__content_4uwco_42{background-color:#fff;padding:20px}._SidebarPanel__content--no-padding_4uwco_47{padding:0}._Spinner--inline_oumod_1{display:inline-block;position:relative;vertical-align:middle}._Spinner--centered_oumod_7{left:50%;position:absolute;top:50%}._Spinner__bar_oumod_13{animation:_Spinner__spin_oumod_1 1.2s linear infinite;background-color:var(--light-body-color);height:14%;left:-20%;position:absolute;top:0;width:40%}@keyframes _Spinner__spin_oumod_1{0%{opacity:1}to{opacity:.15}}._switchField__flex_16z4j_1{align-items:center;display:flex}._switchField__switchInput_16z4j_6{width:55px}._switchField__label_16z4j_10{color:var(--base-body-color);flex:1;line-height:1.1;line-height:20px;margin-bottom:0;pointer-events:none;-moz-user-select:text;-ms-user-select:text;-webkit-user-select:text;user-select:text}._switchField__below_16z4j_22{margin-left:55px;margin-top:var(--spacing-s)}._switchInput__inner_1knbg_1{color:#fff;font-size:12px;left:24px;position:absolute}._switchInput_1knbg_1{background-color:#ccc;border:1px solid #ccc;border-radius:20px;box-sizing:border-box;cursor:pointer;display:inline-block;height:22px;line-height:20px;position:relative;transition:all .3s cubic-bezier(.35,0,.25,1);vertical-align:middle;width:44px}._switchInput_1knbg_1:after{animation-duration:.3s;animation-name:_switchInput__off_1knbg_1;animation-timing-function:cubic-bezier(.35,0,.25,1);background-color:#fff;border-radius:50%;box-shadow:0 2px 5px #00000042;content:" ";cursor:pointer;height:18px;left:2px;position:absolute;top:1px;transform:scale(1);transition:left .3s cubic-bezier(.35,0,.25,1);width:18px}._switchInput_1knbg_1:focus:after,._switchInput_1knbg_1:hover{animation-name:_switchInput__on_1knbg_1;transform:scale(1.1)}._switchInput__checked_1knbg_47{background-color:var(--accent-color);border:1px solid var(--accent-color)}._switchInput__checked_1knbg_47 ._switchInput__inner_1knbg_1{left:6px}._switchInput__checked_1knbg_47:after{left:22px}._switchInput__disabled_1knbg_60{background:#ccc;border-color:#ccc;cursor:no-drop}._switchInput__disabled_1knbg_60:after{animation-name:_none_1knbg_1;background:#9e9e9e;cursor:no-drop}._switchInput__disabled_1knbg_60:focus:after,._switchInput__disabled_1knbg_60:hover{animation-name:_none_1knbg_1;transform:scale(1)}@keyframes _switchInput__on_1knbg_1{0%{transform:scale(1)}50%{transform:scale(1.25)}to{transform:scale(1.1)}}@keyframes _switchInput__off_1knbg_1{0%{transform:scale(1.1)}to{transform:scale(1)}}._TextInput_x2oj2_1{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:none;border:1px solid var(--border-color);border-radius:0;box-sizing:border-box;display:block;font-family:inherit;font-size:var(--font-size-m);padding:10px;resize:none;transition:border .2s var(--material-ease);width:100%}._TextInput_x2oj2_1::placeholder{color:var(--placeholder-body-color)}._TextInput_x2oj2_1:hover{border-color:var(--darker-border-color)}._TextInput_x2oj2_1:focus{border-color:var(--accent-color);box-shadow:0 0 0 3px var(--semi-transparent-accent-color);outline:0}._TextInput--monospaced_x2oj2_30{font-family:var(--monospaced-font-family);font-size:var(--font-size-s)}._TextInput--disabled_x2oj2_35{background:var(--lighter-bg-color);border-color:var(--border-color);color:var(--light-body-color)}._TextInput--error_x2oj2_41,._TextInput--error_x2oj2_41:focus,._TextInput--error_x2oj2_41:hover{border-color:var(--alert-color)}._TextInput--error_x2oj2_41:focus{box-shadow:0 0 0 3px rgba(var(--alert-color-rgb-components),.2)}._TextareaInput_1wnu9_1{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:none;border:1px solid var(--border-color);border-radius:0;box-sizing:border-box;display:block;font-family:inherit;font-size:var(--font-size-m);padding:10px;resize:none;transition:border .2s var(--material-ease);width:100%}._TextareaInput_1wnu9_1::placeholder{color:var(--placeholder-body-color)}._TextareaInput_1wnu9_1:hover{border-color:var(--darker-border-color)}._TextareaInput_1wnu9_1:focus{border-color:var(--accent-color);box-shadow:0 0 0 3px var(--semi-transparent-accent-color);outline:0}._TextareaInput--monospaced_1wnu9_30{font-family:var(--monospaced-font-family);font-size:var(--font-size-s)}._TextareaInput--disabled_1wnu9_35{background:var(--lighter-bg-color);border-color:var(--border-color);color:var(--light-body-color)}._TextareaInput--error_1wnu9_41,._TextareaInput--error_1wnu9_41:focus,._TextareaInput--error_1wnu9_41:hover{border-color:var(--alert-color)}._TextareaInput--error_1wnu9_41:focus{box-shadow:0 0 0 3px rgba(var(--alert-color-rgb-components),.2)}._Button_fy6g6_1{align-items:center;-webkit-appearance:none;-moz-appearance:none;background-color:transparent;border:0;border-left:1px solid var(--border-color);border-right:1px solid var(--border-color);box-sizing:border-box;color:var(--base-body-color);cursor:pointer;display:flex;font-family:inherit;justify-content:center;line-height:inherit;min-height:49px;padding:0;width:49px}._Button_fy6g6_1:focus,._Button_fy6g6_1:hover{background-color:var(--light-bg-color)}._Button_fy6g6_1:first-child{border-left:0}._Button_fy6g6_1:last-child{border-right:0}@media screen and (min-width:380px){._Button_fy6g6_1{min-height:59px;width:59px}._Button_fy6g6_1 svg{font-size:20px}}._Stack_1nnzo_1{align-items:center;display:flex;flex:1;flex-direction:row;justify-content:center;padding:10px 15px}._Stack--s_1nnzo_10{padding-bottom:var(--spacing-s);padding-top:var(--spacing-s)}._Stack--l_1nnzo_15{padding-left:var(--spacing-xl);padding-right:var(--spacing-xl)}._Title_1dx5n_1{font-size:var(--font-size-l);font-weight:500;line-height:1.1;margin-right:15px}@media screen and (min-width:380px){._Title_1dx5n_1{font-size:var(--font-size-xl)}}._Toolbar_1cwb8_1{align-items:stretch;border-bottom:1px solid var(--border-color);border-top:1px solid var(--border-color);display:flex;position:relative}._Toolbar_1cwb8_1:first-child{border-top-width:0}._Toolbar_1cwb8_1:last-child{border-bottom-width:0}._tooltip_3z5rn_1{word-wrap:break-word;background:#fff;border-radius:4px;box-shadow:0 1px 9px #0003;-webkit-hyphens:auto;hyphens:auto;max-width:400px;overflow-wrap:break-word;padding:10px 15px}._Dropdown_nie0g_1{position:relative}._Dropdown__spacer_nie0g_5{top:0;right:0;bottom:0;left:0;pointer-events:none;position:absolute}._Dropdown__menu__search_nie0g_11{border-bottom:1px solid var(--border-color);padding:7px}._Dropdown__menu__search__input_nie0g_16{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:none;border:1px solid var(--border-color);border-radius:3px;box-sizing:border-box;display:block;font-family:inherit;font-size:.9em;padding:8px;resize:none;transition:border .2s var(--material-ease);width:100%}._Dropdown__menu__search__input_nie0g_16::placeholder{color:var(--placeholder-body-color)}._Dropdown__menu__search__input_nie0g_16:hover{border-color:var(--darker-border-color)}._Dropdown__menu__search__input_nie0g_16:focus{border-color:var(--accent-color);box-shadow:0 0 0 3px var(--semi-transparent-accent-color);outline:0}._Dropdown__menu-container_nie0g_45{position:fixed;visibility:hidden}._Dropdown__menu_nie0g_11{background-color:#fff;border-radius:4px;box-shadow:0 3px 10px #0003;margin-bottom:var(--spacing-xl);margin-top:10px;min-width:200px;padding:1px 0;text-align:initial}._Dropdown__menu__inner_nie0g_61{margin:7px 0}._Dropdown__menu__group__title_nie0g_65{background-color:var(--light-bg-color);color:var(--light-body-color);font-size:var(--font-size-xs);padding:5px 15px 3px;text-transform:uppercase}._Dropdown__menu__group__content_nie0g_73{margin:8px 0}._Dropdown__menu__text_nie0g_77{color:var(--light-body-color);display:block;line-height:1.2;padding:4px 15px;position:relative;text-align:left}._Dropdown__menu__option_nie0g_86{align-items:center;color:var(--base-body-color);display:flex;padding:4px 15px;position:relative;text-align:left;text-decoration:none;white-space:nowrap}._Dropdown__menu__option_nie0g_86:focus,._Dropdown__menu__option_nie0g_86:hover{background-color:var(--light-bg-color)}._Dropdown__menu__option_nie0g_86>a{color:inherit;display:block;text-decoration:none}._Dropdown__menu__option--is-selected_nie0g_108{background-color:var(--light-bg-color)}._Dropdown__menu__option--is-disabled_nie0g_112{opacity:.5}._Dropdown__menu__option--is-disabled_nie0g_112 ._Dropdown__menu__option__content_nie0g_115{cursor:not-allowed}._Dropdown__menu__option--is-dangerous_nie0g_120{color:var(--alert-color)}._Dropdown__menu__option--is-dangerous_nie0g_120 svg{fill:var(--alert-color)}._Dropdown__menu__option--is-dangerous_nie0g_120:focus,._Dropdown__menu__option--is-dangerous_nie0g_120:hover{background-color:var(--alert-color);color:#fff}._Dropdown__menu__option--is-dangerous_nie0g_120:focus svg,._Dropdown__menu__option--is-dangerous_nie0g_120:hover svg{fill:#fff}._Dropdown__menu__option--is-active_nie0g_138{font-weight:500}._Dropdown__menu__option--is-active_nie0g_138:focus,._Dropdown__menu__option--is-active_nie0g_138:hover{background-color:none}._Dropdown__menu__option--is-invalid_nie0g_151,._Dropdown__menu__option--is-valid_nie0g_147{padding-left:35px}._Dropdown__menu__option--is-invalid_nie0g_151:before{background-color:var(--alert-color);border-radius:4px;content:"";font-size:12px;height:8px;left:15px;position:absolute;top:50%;transform:translateY(-50%);width:8px}._Dropdown__menu__option__content_nie0g_115{-webkit-appearance:none;-moz-appearance:none;background-color:transparent;border:0;box-sizing:border-box;color:inherit;cursor:pointer;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0;text-align:left}._Dropdown__menu__option__content_nie0g_115>svg{fill:var(--light-body-color);color:var(--light-body-color);display:inline-block;font-size:13px;padding-right:8px;vertical-align:middle}._Dropdown__menu__option__icons_nie0g_194{align-items:center;display:flex;padding-left:15px}._Dropdown__menu__option__icon_nie0g_194{-webkit-appearance:none;-moz-appearance:none;background-color:transparent;border:0;box-sizing:border-box;color:var(--base-body-color);color:var(--light-body-color);cursor:pointer;display:inline-block;font-family:inherit;font-size:inherit;font-size:13px;line-height:inherit;line-height:10px;opacity:0;padding:3px;position:relative;top:-1px;transition:transform .1s ease-in-out;width:100%;width:auto}._Dropdown__menu__option_nie0g_86:focus ._Dropdown__menu__option__icon_nie0g_194,._Dropdown__menu__option_nie0g_86:hover ._Dropdown__menu__option__icon_nie0g_194{opacity:1}._Dropdown__menu__option__icon_nie0g_194:focus,._Dropdown__menu__option__icon_nie0g_194:hover{transform:scale(1.2)}._Dropdown__menu__option__icon_nie0g_194 svg{fill:var(--light-body-color)}._Dropdown__menu__option__icon--delete_nie0g_241{color:var(--alert-color)}._Dropdown__menu__option__icon--delete_nie0g_241 svg{fill:var(--alert-color)}._Dropdown__menu__separator_nie0g_248{background-color:var(--border-color);height:1px;margin:8px 0}._Dropdown__menu_nie0g_11{overflow-y:auto}._SplitViewPane_1cl1f_1{height:100%;overflow-y:auto;position:absolute;width:100%}._SplitViewSash_tds51_1{align-items:center;background-color:rgba(var(--light-color-components),0);display:flex;height:100%;justify-content:center;position:absolute;top:0;transition:background-color .2s .15s;width:100%;z-index:2}._SplitViewSash--dragging_tds51_15,._SplitViewSash_tds51_1:hover{background-color:var(--light-color)}._SplitViewSash--dragging_tds51_15:has(._SplitViewSash__content_tds51_19:hover),._SplitViewSash_tds51_1:hover:has(._SplitViewSash__content_tds51_19:hover){background-color:transparent}._SplitViewSash--no-resize_tds51_24{pointer-events:none}._SplitViewSash--vertical_tds51_28{cursor:col-resize}._SplitViewSash--horizontal_tds51_32{cursor:row-resize}._SplitViewSash__content_tds51_19{cursor:pointer;left:50%;padding:15px 0;pointer-events:auto;position:absolute;top:50%;transform:translate(-50%,-50%)}._SplitViewSash__content__button_tds51_46{align-items:center;background:#fff;border:1px solid var(--border-color);border-radius:6px;color:var(--light-body-color);display:flex;font-size:10px;height:20px;justify-content:center;width:20px;z-index:2}._SplitViewSash__content__button_tds51_46 svg{fill:currentColor;display:block}._SplitViewSash__content_tds51_19:hover ._SplitViewSash__content__button_tds51_46{background:var(--light-bg-color);color:var(--base-body-color)}._SplitView_1oi17_1{flex:1;height:100%;position:relative;width:100%}._SplitView--dragging_1oi17_8._SplitView--vertical_1oi17_8{cursor:col-resize}._SplitView--dragging_1oi17_8._SplitView--horizontal_1oi17_12{cursor:row-resize}._SplitView--disable-select_1oi17_16{-webkit-user-select:none;user-select:none}._SplitView--disable-select_1oi17_16 ._SplitViewPane_1oi17_20{pointer-events:none}._VerticalSplitPane__expand_80tii_1{background:#fff;bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;transition:all .3s cubic-bezier(.55,0,.1,1)}._VerticalSplitPane__expand_80tii_1:hover{animation:_VerticalSplitPane__expand_80tii_1 .6s cubic-bezier(.55,0,.1,1);background:var(--light-bg-color)}._VerticalSplitPane__expand_80tii_1._VerticalSplitPane__expand_80tii_1{border-right:1px solid var(--border-color);transform-origin:left}._VerticalSplitPane__expand_80tii_1._VerticalSplitPane__expand--right_80tii_25{border-left:1px solid var(--border-color);transform-origin:right}@keyframes _VerticalSplitPane__expand_80tii_1{0%{transform:scaleX(1)}50%{transform:scaleX(2)}to{transform:scaleX(1)}}._VerticalSplitPaneOverlay_80tii_42{background:linear-gradient(180deg,#30302f80,#30302f4d);bottom:0;height:100%;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:12}._VerticalSplitPaneOverlay__primary_80tii_58{bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}._VerticalSplitPaneOverlay__primary--left_80tii_67{margin-right:20px}._VerticalSplitPaneOverlay__primary--right_80tii_71{margin-left:20px}._VerticalSplitPaneOverlay__secondary_80tii_75{background:#fff;bottom:0;box-shadow:0 0 15px #0006;position:absolute;top:0}._VerticalSplitPaneOverlay__secondary--left_80tii_83{left:0}._VerticalSplitPaneOverlay__secondary--right_80tii_87{right:0}._VerticalSplitPaneOverlay__sash_80tii_91{height:100%;position:absolute;top:0}._VerticalSplitPaneOverlay__secondary--left_80tii_83 ._VerticalSplitPaneOverlay__sash_80tii_91{right:0}._VerticalSplitPaneOverlay__secondary--right_80tii_87 ._VerticalSplitPaneOverlay__sash_80tii_91{left:0}._fieldBlock_1s122_1{margin-bottom:12px}._fieldBlock_1s122_1:last-child{margin-bottom:0}._container_ev7x9_1{display:flex;flex-direction:column;gap:16px}._toolbar_ev7x9_7{display:flex;align-items:center;justify-content:space-between;gap:12px}._gridControls_ev7x9_14{display:flex;align-items:center;gap:16px}._layoutControls_ev7x9_20{display:flex;align-items:center;gap:16px;flex-wrap:wrap}._controlGroupColumn_ev7x9_27{display:flex;flex-direction:column;align-items:flex-start;gap:4px}._controlGroup_ev7x9_27{display:flex;align-items:center;gap:8px}._controlLabel_ev7x9_40{font-size:12px;font-weight:500;color:var(--light-body-color)}._controlSelect_ev7x9_46{padding:6px 10px;font-size:12px;color:var(--base-body-color);background:#fff;border:1px solid var(--border-color);border-radius:4px;cursor:pointer}._controlInput_ev7x9_56{padding:6px 10px;font-size:12px;color:var(--base-body-color);background:#fff;border:1px solid var(--border-color);border-radius:4px}._controlSelect_ev7x9_46:focus{outline:none;border-color:var(--accent-color)}._controlInput_ev7x9_56:focus{outline:none;border-color:var(--accent-color)}._inputError_ev7x9_75{border-color:var(--alert-color)}._errorText_ev7x9_79{font-size:11px;color:var(--alert-color)}._gridInfo_ev7x9_84{font-size:12px;color:var(--light-body-color);padding:6px 12px;background:var(--light-bg-color);border-radius:4px}._layoutMeta_ev7x9_92{font-size:12px;color:var(--light-body-color);padding:4px 0}._toolbarRow_ev7x9_98{display:flex;justify-content:flex-end}._addSlotButton_ev7x9_103{padding:6px 12px;font-size:12px;font-weight:500;color:var(--accent-color);background:#fff;border:1px solid var(--accent-color);border-radius:4px;cursor:pointer;transition:all .15s ease}._addSlotButton_ev7x9_103:hover{background:var(--accent-color);color:#fff}._gridPreview_ev7x9_121{padding:16px;background:linear-gradient(135deg,#f8f9fa,#f0f2f5);border:1px solid var(--border-color);border-radius:8px;max-height:60vh;overflow:auto}._grid_ev7x9_14{display:grid;gap:12px;width:100%}._grid_ev7x9_14[data-layout=masonry]{grid-auto-flow:dense}._grid_ev7x9_14[data-columns="1"]{grid-template-columns:1fr}._grid_ev7x9_14[data-columns="2"]{grid-template-columns:repeat(2,1fr)}._grid_ev7x9_14[data-columns="3"]{grid-template-columns:repeat(3,1fr)}._grid_ev7x9_14[data-columns="4"]{grid-template-columns:repeat(4,1fr)}._slotItem_ev7x9_157{position:relative;width:100%;height:100%;border-radius:6px;overflow:hidden;cursor:grab;transition:all .2s ease;box-shadow:0 1px 3px #00000014}._slotItem_ev7x9_157:active{cursor:grabbing}._slotItem_ev7x9_157:hover{box-shadow:0 4px 12px #00000026;transform:translateY(-1px)}._slotItem_ev7x9_157._isSelected_ev7x9_177{box-shadow:0 0 0 2px var(--accent-color),0 4px 12px #00000026}._slotItem_ev7x9_157._isDragging_ev7x9_181{opacity:.5;transform:scale(.98);box-shadow:0 1px 3px #00000014}._slotItem_ev7x9_157._isDragOver_ev7x9_187{box-shadow:0 0 0 2px var(--accent-color),0 8px 24px #0003;transform:scale(1.02)}._slotItem_ev7x9_157._isRequired_ev7x9_192:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--accent-color);z-index:2}._slotPreview_ev7x9_203{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;background:#fff;color:var(--light-body-color);min-height:60px;height:100%}._previewContent_ev7x9_216{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center;z-index:1}._previewContent_ev7x9_216>svg{width:24px;height:24px;opacity:.4}._ratioFrame_ev7x9_231{position:absolute;top:10px;right:10px;bottom:10px;left:10px;display:flex;align-items:center;justify-content:center;pointer-events:none;z-index:0}._ratioShape_ev7x9_241{max-width:100%;max-height:100%;border:1px dashed var(--border-color);border-radius:6px;background:#00000005}._dragHandle_ev7x9_249{position:absolute;top:4px;left:4px;width:20px;height:20px;display:flex;align-items:center;justify-content:center;color:var(--light-body-color);opacity:0;transition:opacity .15s ease;cursor:grab;z-index:2}._dragHandle_ev7x9_249:active{cursor:grabbing}._dragHandle_ev7x9_249 svg{width:12px;height:12px}._slotItem_ev7x9_157:hover ._dragHandle_ev7x9_249{opacity:.6}._slotItem_ev7x9_157._isDragging_ev7x9_181 ._dragHandle_ev7x9_249{opacity:1}._slotLabel_ev7x9_282{font-size:11px;font-weight:600;color:var(--base-body-color);text-align:center;padding:0 8px}._slotMeta_ev7x9_290{font-size:9px;color:var(--light-body-color);text-align:center}._slotOverlay_ev7x9_297{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;gap:8px;background:#0009;opacity:0;transition:opacity .15s ease;pointer-events:none;z-index:3}._slotItem_ev7x9_157:hover ._slotOverlay_ev7x9_297,._slotItem_ev7x9_157:focus-within ._slotOverlay_ev7x9_297{opacity:1;pointer-events:auto}._overlayButton_ev7x9_317{display:flex;align-items:center;justify-content:center;width:28px;height:28px;background:#fff;border:none;border-radius:4px;cursor:pointer;color:var(--base-body-color);transition:all .15s ease}._overlayButton_ev7x9_317:hover{background:var(--accent-color);color:#fff}._overlayButton_ev7x9_317._danger_ev7x9_336:hover{background:var(--alert-color)}._overlayButton_ev7x9_317 svg{width:14px;height:14px}._editPanel_ev7x9_346{margin-top:12px;padding:16px;background:#fff;border:1px solid var(--border-color);border-radius:8px;box-shadow:0 4px 12px #00000014}._editPanelHeader_ev7x9_355{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--border-color)}._editPanelTitle_ev7x9_364{font-size:13px;font-weight:600;color:var(--base-body-color)}._closeButton_ev7x9_370{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:transparent;border:none;border-radius:4px;cursor:pointer;color:var(--light-body-color);transition:all .15s ease}._closeButton_ev7x9_370:hover{background:var(--light-bg-color);color:var(--base-body-color)}._closeButton_ev7x9_370 svg{width:14px;height:14px}._editPanelForm_ev7x9_394{display:flex;flex-direction:column;gap:12px}._formRow_ev7x9_400{display:flex;gap:12px}._formField_ev7x9_405{flex:1;display:flex;flex-direction:column;gap:4px}._formLabel_ev7x9_412{font-size:11px;font-weight:500;color:var(--light-body-color);text-transform:uppercase;letter-spacing:.5px}._formInput_ev7x9_420{padding:8px 10px;font-size:13px;color:var(--base-body-color);background:var(--light-bg-color);border:1px solid var(--border-color);border-radius:4px}._formInput_ev7x9_420:focus{outline:none;border-color:var(--accent-color);background:#fff}._formSelect_ev7x9_435{padding:8px 10px;font-size:13px;color:var(--base-body-color);background:var(--light-bg-color);border:1px solid var(--border-color);border-radius:4px;cursor:pointer}._formSelect_ev7x9_435:focus{outline:none;border-color:var(--accent-color)}._formCheckbox_ev7x9_450{display:flex;align-items:center;gap:8px;padding:8px 0}._formCheckbox_ev7x9_450 input{width:16px;height:16px;cursor:pointer}._formCheckbox_ev7x9_450 span{font-size:13px;color:var(--base-body-color)}._formHint_ev7x9_468{font-size:11px;color:var(--light-body-color)}._emptyGrid_ev7x9_474{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;background:linear-gradient(135deg,#f8f9fa,#f0f2f5);border:2px dashed var(--border-color);border-radius:8px;text-align:center}._emptyIcon_ev7x9_487{color:var(--light-body-color);opacity:.5}._emptyIcon_ev7x9_487 svg{width:48px;height:48px}._emptyText_ev7x9_497{font-size:14px;color:var(--light-body-color)}._emptyHint_ev7x9_502{font-size:12px;color:var(--lighter-body-color)}._emptyCell_ev7x9_508{display:flex;align-items:center;justify-content:center;width:100%;height:100%;min-height:80px;border:2px dashed var(--border-color);border-radius:6px;background:#ffffff80;transition:all .2s ease}._emptyCell_ev7x9_508:hover{border-color:var(--accent-color);background:#fffc}._emptyCell_ev7x9_508._isDragOver_ev7x9_187{border-color:var(--accent-color);background:rgba(var(--accent-color-rgb, 59, 130, 246),.1);transform:scale(1.02)}._addCellButton_ev7x9_532{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;border-radius:50%;background:transparent;color:var(--light-body-color);cursor:pointer;transition:all .15s ease}._addCellButton_ev7x9_532:hover{background:var(--accent-color);color:#fff;transform:scale(1.1)}._addCellButton_ev7x9_532 svg{width:20px;height:20px}._card_lyugj_1{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--border-color);border-radius:6px;background:#fff;transition:box-shadow .2s ease,border-color .2s ease}._card_lyugj_1:hover{border-color:var(--accent-color);box-shadow:0 6px 14px #0000000f}._thumbnail_lyugj_17{flex-shrink:0;width:44px;height:44px;border-radius:6px;overflow:hidden;background:var(--light-bg-color);border:1px solid var(--border-color)}._thumbnail_lyugj_17 img{width:100%;height:100%;object-fit:cover}._filePlaceholder_lyugj_33{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:500;color:var(--light-body-color);text-transform:uppercase}._info_lyugj_45{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}._filename_lyugj_53{font-size:13px;font-weight:500;color:var(--base-body-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._dimensions_lyugj_62{font-size:11px;color:var(--light-body-color)}._controls_lyugj_67{display:flex;align-items:center;gap:4px;flex-shrink:0;padding:4px;border-radius:6px;background:var(--lighter-bg-color);border:1px solid var(--border-color)}._controlButton_lyugj_78{padding:5px 9px;font-size:11px;font-weight:500;color:var(--base-body-color);background:#fff;border:1px solid transparent;border-radius:4px;cursor:pointer;transition:border-color .15s ease,background .15s ease}._controlButton_lyugj_78:hover:not(:disabled){border-color:var(--accent-color);background:var(--light-bg-color)}._controlButton_lyugj_78:disabled{opacity:.5;cursor:not-allowed}._customAspectRatioInput_lyugj_100{width:74px;padding:5px 6px;font-size:11px;color:var(--base-body-color);background:#fff;border:1px solid var(--border-color);border-radius:4px}._customAspectRatioField_lyugj_110{display:flex;flex-direction:column;align-items:flex-start;gap:2px}._inputError_lyugj_117{border-color:var(--alert-color)}._errorText_lyugj_121{font-size:10px;color:var(--alert-color);line-height:1.2}._customAspectRatioInput_lyugj_100:focus{outline:none;border-color:var(--accent-color)}._customAspectRatioInput_lyugj_100:disabled{opacity:.5;cursor:not-allowed}._menuButton_lyugj_137{display:flex;align-items:center;justify-content:center;width:28px;height:28px;background:#fff;border:1px solid transparent;border-radius:4px;cursor:pointer;color:var(--light-body-color);transition:all .15s ease}._menuButton_lyugj_137:hover{background:var(--light-bg-color);border-color:var(--accent-color);color:var(--base-body-color)}._menuButton_lyugj_137:disabled{opacity:.5;cursor:not-allowed}._loadingState_lyugj_162{display:flex;align-items:center;justify-content:center;padding:12px;width:100%}._errorState_lyugj_170{display:flex;align-items:center;justify-content:space-between;width:100%;color:var(--alert-color);font-size:12px}._removeButton_lyugj_179{padding:4px 8px;font-size:11px;color:var(--alert-color);background:transparent;border:1px solid var(--alert-color);border-radius:4px;cursor:pointer}._removeButton_lyugj_179:hover{background:var(--alert-color);color:#fff}._singleEditor_zmv18_1{display:flex;flex-direction:column;gap:12px}._header_zmv18_7{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}._headerInfo_zmv18_15{display:flex;align-items:baseline;gap:8px}._headerTitle_zmv18_21{font-size:11px;font-weight:600;letter-spacing:.6px;text-transform:uppercase;color:var(--base-body-color)}._headerCount_zmv18_29{font-size:11px;color:var(--light-body-color);padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--light-bg-color)}._galleryEditor_v0i03_1{display:flex;flex-direction:column;gap:12px}._header_v0i03_7{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}._headerInfo_v0i03_15{display:flex;align-items:baseline;gap:8px}._headerTitle_v0i03_21{font-size:11px;font-weight:600;letter-spacing:.6px;text-transform:uppercase;color:var(--base-body-color)}._headerCount_v0i03_29{font-size:11px;color:var(--light-body-color);padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--light-bg-color)}._assetList_v0i03_38{display:flex;flex-direction:column;gap:8px}._container_z8nk3_1{display:flex;flex-direction:column;gap:12px}._grid_z8nk3_7{display:grid;gap:12px}._grid_z8nk3_7[data-layout=masonry]{grid-auto-flow:dense}._slotCell_z8nk3_16{display:flex;min-width:0;min-height:0}._grid_z8nk3_7[data-columns="1"]{grid-template-columns:1fr}._grid_z8nk3_7[data-columns="2"]{grid-template-columns:repeat(2,1fr)}._grid_z8nk3_7[data-columns="3"]{grid-template-columns:repeat(3,1fr)}._grid_z8nk3_7[data-columns="4"]{grid-template-columns:repeat(4,1fr)}._slotCard_z8nk3_39{display:flex;flex-direction:column;border:1px solid var(--border-color);border-radius:6px;background:#fff;overflow:hidden;transition:border-color .2s ease,box-shadow .2s ease;width:100%;height:100%}._slotCard_z8nk3_39:hover{border-color:var(--accent-color);box-shadow:0 8px 16px #00000014}._slotCard_z8nk3_39._isEmpty_z8nk3_56{border-style:dashed}._slotCard_z8nk3_39._isRequired_z8nk3_60 ._slotHeader_z8nk3_60{background:var(--light-bg-color)}._slotHeader_z8nk3_60{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--border-color)}._slotLabel_z8nk3_72{font-size:12px;font-weight:600;color:var(--base-body-color)}._slotMeta_z8nk3_78{font-size:10px;color:var(--light-body-color)}._requiredBadge_z8nk3_83{font-size:9px;font-weight:500;padding:2px 6px;background:var(--accent-color);color:#fff;border-radius:3px;text-transform:uppercase}._slotContent_z8nk3_93{position:relative;flex:1;min-height:0}._emptySlot_z8nk3_100{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px 12px;background:var(--lighter-bg-color)}._emptyIcon_z8nk3_110{color:var(--light-body-color)}._emptyIcon_z8nk3_110 svg{width:32px;height:32px}._emptyText_z8nk3_119{font-size:11px;color:var(--light-body-color)}._selectButton_z8nk3_124{padding:6px 12px;font-size:11px;font-weight:500;color:var(--accent-color);background:#fff;border:1px solid var(--accent-color);border-radius:4px;cursor:pointer;transition:all .15s ease}._selectButton_z8nk3_124:hover:not(:disabled){background:var(--accent-color);color:#fff}._selectButton_z8nk3_124:disabled{opacity:.5;cursor:not-allowed}._filledSlot_z8nk3_147{position:relative}._thumbnailContainer_z8nk3_151{position:relative;overflow:hidden;background:var(--light-bg-color)}._thumbnail_z8nk3_151{width:100%;height:100%;object-fit:cover}._filePlaceholder_z8nk3_163{display:flex;align-items:center;justify-content:center;width:100%;height:100%;min-height:80px;font-size:11px;font-weight:600;color:var(--light-body-color);text-transform:uppercase;background:var(--light-bg-color)}._slotOverlay_z8nk3_177{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;gap:8px;background:#00000080;opacity:0;transition:opacity .15s ease;pointer-events:none}._filledSlot_z8nk3_147:hover ._slotOverlay_z8nk3_177,._filledSlot_z8nk3_147:focus-within ._slotOverlay_z8nk3_177{opacity:1;pointer-events:auto}._overlayButton_z8nk3_196{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:#fff;border:none;border-radius:4px;cursor:pointer;color:var(--base-body-color);transition:all .15s ease}._overlayButton_z8nk3_196:hover{background:var(--accent-color);color:#fff}._overlayButton_z8nk3_196._danger_z8nk3_215:hover{background:var(--alert-color)}._overlayButton_z8nk3_196 svg{width:16px;height:16px}._assetInfo_z8nk3_224{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-top:1px solid var(--border-color);background:var(--lighter-bg-color)}._filename_z8nk3_233{font-size:11px;color:var(--base-body-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}._dimensions_z8nk3_243{font-size:10px;color:var(--light-body-color);flex-shrink:0;margin-left:8px}._loadingState_z8nk3_251{display:flex;align-items:center;justify-content:center;padding:24px}._errorState_z8nk3_258{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px;color:var(--alert-color);font-size:11px}._removeErrorButton_z8nk3_268{padding:4px 8px;font-size:10px;color:var(--alert-color);background:transparent;border:1px solid var(--alert-color);border-radius:4px;cursor:pointer}._removeErrorButton_z8nk3_268:hover{background:var(--alert-color);color:#fff}._emptyGrid_z8nk3_283{padding:32px;border:2px dashed var(--border-color);border-radius:4px;text-align:center;color:var(--light-body-color);font-size:13px}._emptyState_1gmkv_1{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:10px;padding:24px;border:1px dashed var(--border-color);border-radius:6px;background:linear-gradient(135deg,#f8f9fb,#f1f3f6);text-align:center}._icon_1gmkv_14{display:flex;align-items:center;justify-content:center;color:var(--light-body-color)}._icon_1gmkv_14 svg{width:28px;height:28px}._text_1gmkv_26{display:block;margin:0;font-size:13px;color:var(--light-body-color)}._inspector_10ftp_1{margin-top:var(--spacing-l)}._mediaLayoutsField_10ftp_5{width:100%}
|