@nextbridgehq/payload-block-builder 0.1.9 → 0.2.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.
@@ -1,361 +1,361 @@
1
- /* ── Schema Builder Field — Payload light theme tokens ───────────────────── */
2
-
3
- /* ── Input ──────────────────────────────────────────────────────────────── */
4
- .sbf-input {
5
- box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.1);
6
- font-family: var(--font-body);
7
- width: 100%;
8
- border: 1px solid var(--theme-elevation-150);
9
- border-radius: var(--style-radius-s, 4px);
10
- background: var(--theme-input-bg, var(--theme-elevation-0));
11
- color: var(--theme-elevation-800);
12
- font-size: 1rem;
13
- height: 40px;
14
- line-height: 20px;
15
- padding: 8px 15px;
16
- -webkit-appearance: none;
17
- transition-property: border, box-shadow, background-color;
18
- transition-duration: 0.1s, 0.1s, 0.5s;
19
- transition-timing-function: cubic-bezier(0, 0.2, 0.2, 1);
20
- box-sizing: border-box;
21
- }
22
- .sbf-input:hover:not(:disabled) {
23
- box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.2);
24
- border-color: var(--theme-elevation-250);
25
- }
26
- .sbf-input:focus,
27
- .sbf-input:focus-within,
28
- .sbf-input:active {
29
- border-color: var(--theme-elevation-400);
30
- outline: 0;
31
- }
32
- .sbf-input:disabled {
33
- background: var(--theme-elevation-100);
34
- color: var(--theme-elevation-400);
35
- box-shadow: none;
36
- cursor: not-allowed;
37
- }
38
- .sbf-input:disabled:hover {
39
- border-color: var(--theme-elevation-150);
40
- box-shadow: none;
41
- }
42
- .sbf-input::placeholder {
43
- color: var(--theme-elevation-400);
44
- font-weight: 400;
45
- font-size: 1rem;
46
- }
47
-
48
- /* ── Select ─────────────────────────────────────────────────────────────── */
49
- .sbf-select {
50
- cursor: pointer;
51
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23888' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
52
- background-repeat: no-repeat;
53
- background-position: right 12px center;
54
- padding-right: 32px;
55
- }
56
-
57
- /* ── Field label — mirrors Payload .field-label ─────────────────────────── */
58
- .sbf-label {
59
- display: flex;
60
- align-items: center;
61
- padding-bottom: 5px;
62
- color: var(--theme-elevation-800);
63
- font-family: var(--font-body);
64
- font-size: 13px;
65
- line-height: 20px;
66
- font-weight: 400;
67
- }
68
- .sbf-label--required::after {
69
- content: '*';
70
- color: var(--theme-error-500, #ef4444);
71
- margin-left: 5px;
72
- }
73
-
74
- /* ── Field description — mirrors .field-description ─────────────────────── */
75
- .sbf-description {
76
- display: flex;
77
- color: var(--theme-elevation-400);
78
- font-size: 0.75rem;
79
- line-height: 1.4;
80
- margin-top: calc(var(--base, 16px) / 4);
81
- font-family: var(--font-body);
82
- }
83
-
84
- /* ── Collapsible row — mirrors .collapsible--style-default ──────────────── */
85
- .sbf-row {
86
- border: 1px solid var(--theme-elevation-200);
87
- border-radius: var(--style-radius-s, 4px);
88
- overflow: hidden;
89
- transition: border-color 0.1s;
90
- }
91
- .sbf-row:hover { border-color: var(--theme-elevation-300); }
92
-
93
- /* Row header — mirrors .collapsible__toggle-wrap */
94
- .sbf-row__header {
95
- position: relative;
96
- padding: 8px 8px 8px 16px;
97
- display: flex;
98
- align-items: center;
99
- justify-content: space-between;
100
- background: var(--theme-elevation-50);
101
- line-height: 24px;
102
- gap: 4px;
103
- border-top-right-radius: var(--style-radius-s, 4px);
104
- border-top-left-radius: var(--style-radius-s, 4px);
105
- cursor: pointer;
106
- user-select: none;
107
- width: 100%;
108
- border: none;
109
- text-align: left;
110
- font-family: var(--font-body);
111
- transition: background 0.1s;
112
- }
113
- .sbf-row__header:hover { background: var(--theme-elevation-100); }
114
- .sbf-row--collapsed .sbf-row__header {
115
- border-bottom-right-radius: var(--style-radius-s, 4px);
116
- border-bottom-left-radius: var(--style-radius-s, 4px);
117
- }
118
-
119
- /* Row content — mirrors .collapsible__content */
120
- .sbf-row__content {
121
- background: var(--theme-elevation-0);
122
- border-bottom-left-radius: var(--style-radius-s, 4px);
123
- border-bottom-right-radius: var(--style-radius-s, 4px);
124
- padding: var(--base, 16px);
125
- display: flex;
126
- flex-direction: column;
127
- gap: calc(var(--base, 16px) * 0.75);
128
- border-top: 1px solid var(--theme-elevation-150);
129
- }
130
-
131
- /* ── Row label & badge ──────────────────────────────────────────────────── */
132
- .sbf-row__label {
133
- flex: 1;
134
- font-size: 13px;
135
- line-height: 20px;
136
- font-weight: 400;
137
- color: var(--theme-text, var(--theme-elevation-800));
138
- font-family: var(--font-body);
139
- overflow: hidden;
140
- text-overflow: ellipsis;
141
- white-space: nowrap;
142
- }
143
- .sbf-row__label--empty {
144
- color: var(--theme-elevation-400);
145
- font-style: italic;
146
- }
147
-
148
- .sbf-type-badge {
149
- display: inline-flex;
150
- align-items: center;
151
- padding: 2px 8px;
152
- border-radius: 3px;
153
- font-size: 11px;
154
- font-weight: 500;
155
- font-family: var(--font-body);
156
- letter-spacing: 0.02em;
157
- white-space: nowrap;
158
- background: var(--theme-elevation-150);
159
- color: var(--theme-elevation-600);
160
- flex-shrink: 0;
161
- }
162
-
163
- /* ── Icon action button — mirrors .collapsible__actions ─────────────────── */
164
- .sbf-icon-btn {
165
- display: flex;
166
- align-items: center;
167
- justify-content: center;
168
- width: 24px;
169
- height: 24px;
170
- background: transparent;
171
- border: none;
172
- border-radius: var(--style-radius-s, 4px);
173
- cursor: pointer;
174
- color: var(--theme-elevation-500);
175
- font-size: 13px;
176
- padding: 0;
177
- flex-shrink: 0;
178
- font-family: var(--font-body);
179
- transition: background 0.1s, color 0.1s;
180
- line-height: 1;
181
- }
182
- .sbf-icon-btn:hover {
183
- background: var(--theme-elevation-150);
184
- color: var(--theme-elevation-900);
185
- }
186
- .sbf-icon-btn--danger:hover {
187
- background: var(--theme-error-50, rgba(239, 68, 68, 0.08));
188
- color: var(--theme-error-500, #ef4444);
189
- }
190
-
191
- /* ── 2-column grid ──────────────────────────────────────────────────────── */
192
- .sbf-grid-2 {
193
- display: grid;
194
- grid-template-columns: 1fr 1fr;
195
- gap: calc(var(--base, 16px) * 0.75);
196
- }
197
-
198
- /* ── Checkbox row ───────────────────────────────────────────────────────── */
199
- .sbf-checkbox-wrap {
200
- display: flex;
201
- align-items: center;
202
- gap: 8px;
203
- cursor: pointer;
204
- }
205
- .sbf-checkbox-wrap input[type='checkbox'] {
206
- width: 16px;
207
- height: 16px;
208
- flex-shrink: 0;
209
- cursor: pointer;
210
- border: 1px solid var(--theme-elevation-300);
211
- border-radius: 2px;
212
- accent-color: var(--theme-success-500, #22c55e);
213
- }
214
- .sbf-checkbox-label {
215
- font-size: 13px;
216
- line-height: 20px;
217
- color: var(--theme-elevation-800);
218
- font-family: var(--font-body);
219
- cursor: pointer;
220
- }
221
-
222
- /* ── Flags row ──────────────────────────────────────────────────────────── */
223
- .sbf-flags-row {
224
- display: flex;
225
- gap: calc(var(--base, 16px) * 1.5);
226
- flex-wrap: wrap;
227
- }
228
-
229
- /* ── Section accordion (Admin settings / Conditions) ────────────────────── */
230
- .sbf-section {
231
- border: 1px solid var(--theme-elevation-100);
232
- border-radius: var(--style-radius-s, 4px);
233
- overflow: hidden;
234
- }
235
- .sbf-section__toggle {
236
- width: 100%;
237
- display: flex;
238
- align-items: center;
239
- justify-content: space-between;
240
- padding: 8px 12px;
241
- background: var(--theme-elevation-50);
242
- border: none;
243
- cursor: pointer;
244
- font-size: 13px;
245
- font-weight: 400;
246
- font-family: var(--font-body);
247
- color: var(--theme-elevation-600);
248
- line-height: 20px;
249
- text-align: left;
250
- transition: background 0.1s;
251
- gap: 8px;
252
- }
253
- .sbf-section__toggle:hover { background: var(--theme-elevation-100); }
254
- .sbf-section__toggle-icon {
255
- font-size: 10px;
256
- color: var(--theme-elevation-400);
257
- flex-shrink: 0;
258
- transition: transform 0.15s;
259
- }
260
- .sbf-section__toggle--open .sbf-section__toggle-icon { transform: rotate(90deg); }
261
- .sbf-section__body {
262
- padding: 12px;
263
- background: var(--theme-elevation-0);
264
- display: flex;
265
- flex-direction: column;
266
- gap: calc(var(--base, 16px) * 0.75);
267
- border-top: 1px solid var(--theme-elevation-100);
268
- }
269
-
270
- /* ── Nested fields ──────────────────────────────────────────────────────── */
271
- .sbf-nested {
272
- border-left: 2px solid var(--theme-elevation-200);
273
- padding-left: 12px;
274
- margin-top: 4px;
275
- display: flex;
276
- flex-direction: column;
277
- gap: calc(var(--base, 16px) / 2);
278
- }
279
-
280
- /* ── Options row ────────────────────────────────────────────────────────── */
281
- .sbf-options-row {
282
- display: grid;
283
- grid-template-columns: 1fr 1fr auto;
284
- gap: calc(var(--base, 16px) * 0.5);
285
- align-items: center;
286
- }
287
-
288
- /* ── Conditions grid ────────────────────────────────────────────────────── */
289
- .sbf-conditions-grid {
290
- display: grid;
291
- grid-template-columns: 1fr 1fr 1fr auto;
292
- gap: calc(var(--base, 16px) * 0.5);
293
- align-items: end;
294
- }
295
-
296
- /* ── Add Field button — mirrors Payload array add-row ───────────────────── */
297
- .sbf-add-btn {
298
- display: inline-flex;
299
- align-items: center;
300
- gap: 6px;
301
- padding: 0;
302
- background: none;
303
- border: none;
304
- cursor: pointer;
305
- color: var(--theme-elevation-400);
306
- font-size: 13px;
307
- font-family: var(--font-body);
308
- line-height: 24px;
309
- transition: color 0.1s;
310
- margin-top: 2px;
311
- }
312
- .sbf-add-btn:hover:not(:disabled) { color: var(--theme-elevation-800); }
313
- .sbf-add-btn:disabled { cursor: not-allowed; opacity: 0.5; }
314
- .sbf-add-btn__icon {
315
- display: flex;
316
- align-items: center;
317
- justify-content: center;
318
- width: 24px;
319
- height: 24px;
320
- border: 1px solid currentColor;
321
- border-radius: 50%;
322
- font-size: 14px;
323
- font-weight: 600;
324
- flex-shrink: 0;
325
- line-height: 1;
326
- transition: border-color 0.1s;
327
- }
328
-
329
- .sbf-add-btn--small { font-size: 12px; gap: 5px; }
330
- .sbf-add-btn--small .sbf-add-btn__icon { width: 18px; height: 18px; font-size: 12px; }
331
-
332
- /* ── Section heading ────────────────────────────────────────────────────── */
333
- .sbf-section-heading {
334
- display: flex;
335
- align-items: center;
336
- justify-content: space-between;
337
- margin-bottom: calc(var(--base, 16px) / 2);
338
- }
339
- .sbf-section-label {
340
- display: flex;
341
- align-items: center;
342
- color: var(--theme-elevation-800);
343
- font-family: var(--font-body);
344
- font-size: 13px;
345
- line-height: 20px;
346
- font-weight: 400;
347
- }
348
-
349
- /* ── Empty state ────────────────────────────────────────────────────────── */
350
- .sbf-empty {
351
- padding: calc(var(--base, 16px) * 1.5) var(--base, 16px);
352
- border: 1px dashed var(--theme-elevation-200);
353
- border-radius: var(--style-radius-s, 4px);
354
- text-align: center;
355
- color: var(--theme-elevation-400);
356
- font-size: 13px;
357
- font-family: var(--font-body);
358
- line-height: 20px;
359
- }
360
-
361
-
1
+ /* ── Schema Builder Field Payload light theme tokens ───────────────────── */
2
+
3
+ /* ── Input ──────────────────────────────────────────────────────────────── */
4
+ .sbf-input {
5
+ box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.1);
6
+ font-family: var(--font-body);
7
+ width: 100%;
8
+ border: 1px solid var(--theme-elevation-150);
9
+ border-radius: var(--style-radius-s, 4px);
10
+ background: var(--theme-input-bg, var(--theme-elevation-0));
11
+ color: var(--theme-elevation-800);
12
+ font-size: 1rem;
13
+ height: 40px;
14
+ line-height: 20px;
15
+ padding: 8px 15px;
16
+ -webkit-appearance: none;
17
+ transition-property: border, box-shadow, background-color;
18
+ transition-duration: 0.1s, 0.1s, 0.5s;
19
+ transition-timing-function: cubic-bezier(0, 0.2, 0.2, 1);
20
+ box-sizing: border-box;
21
+ }
22
+ .sbf-input:hover:not(:disabled) {
23
+ box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.2);
24
+ border-color: var(--theme-elevation-250);
25
+ }
26
+ .sbf-input:focus,
27
+ .sbf-input:focus-within,
28
+ .sbf-input:active {
29
+ border-color: var(--theme-elevation-400);
30
+ outline: 0;
31
+ }
32
+ .sbf-input:disabled {
33
+ background: var(--theme-elevation-100);
34
+ color: var(--theme-elevation-400);
35
+ box-shadow: none;
36
+ cursor: not-allowed;
37
+ }
38
+ .sbf-input:disabled:hover {
39
+ border-color: var(--theme-elevation-150);
40
+ box-shadow: none;
41
+ }
42
+ .sbf-input::placeholder {
43
+ color: var(--theme-elevation-400);
44
+ font-weight: 400;
45
+ font-size: 1rem;
46
+ }
47
+
48
+ /* ── Select ─────────────────────────────────────────────────────────────── */
49
+ .sbf-select {
50
+ cursor: pointer;
51
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23888' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
52
+ background-repeat: no-repeat;
53
+ background-position: right 12px center;
54
+ padding-right: 32px;
55
+ }
56
+
57
+ /* ── Field label mirrors Payload .field-label ─────────────────────────── */
58
+ .sbf-label {
59
+ display: flex;
60
+ align-items: center;
61
+ padding-bottom: 5px;
62
+ color: var(--theme-elevation-800);
63
+ font-family: var(--font-body);
64
+ font-size: 13px;
65
+ line-height: 20px;
66
+ font-weight: 400;
67
+ }
68
+ .sbf-label--required::after {
69
+ content: '*';
70
+ color: var(--theme-error-500, #ef4444);
71
+ margin-left: 5px;
72
+ }
73
+
74
+ /* ── Field description mirrors .field-description ─────────────────────── */
75
+ .sbf-description {
76
+ display: flex;
77
+ color: var(--theme-elevation-400);
78
+ font-size: 0.75rem;
79
+ line-height: 1.4;
80
+ margin-top: calc(var(--base, 16px) / 4);
81
+ font-family: var(--font-body);
82
+ }
83
+
84
+ /* ── Collapsible row mirrors .collapsible--style-default ──────────────── */
85
+ .sbf-row {
86
+ border: 1px solid var(--theme-elevation-200);
87
+ border-radius: var(--style-radius-s, 4px);
88
+ overflow: hidden;
89
+ transition: border-color 0.1s;
90
+ }
91
+ .sbf-row:hover { border-color: var(--theme-elevation-300); }
92
+
93
+ /* Row header mirrors .collapsible__toggle-wrap */
94
+ .sbf-row__header {
95
+ position: relative;
96
+ padding: 8px 8px 8px 16px;
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: space-between;
100
+ background: var(--theme-elevation-50);
101
+ line-height: 24px;
102
+ gap: 4px;
103
+ border-top-right-radius: var(--style-radius-s, 4px);
104
+ border-top-left-radius: var(--style-radius-s, 4px);
105
+ cursor: pointer;
106
+ user-select: none;
107
+ width: 100%;
108
+ border: none;
109
+ text-align: left;
110
+ font-family: var(--font-body);
111
+ transition: background 0.1s;
112
+ }
113
+ .sbf-row__header:hover { background: var(--theme-elevation-100); }
114
+ .sbf-row--collapsed .sbf-row__header {
115
+ border-bottom-right-radius: var(--style-radius-s, 4px);
116
+ border-bottom-left-radius: var(--style-radius-s, 4px);
117
+ }
118
+
119
+ /* Row content mirrors .collapsible__content */
120
+ .sbf-row__content {
121
+ background: var(--theme-elevation-0);
122
+ border-bottom-left-radius: var(--style-radius-s, 4px);
123
+ border-bottom-right-radius: var(--style-radius-s, 4px);
124
+ padding: var(--base, 16px);
125
+ display: flex;
126
+ flex-direction: column;
127
+ gap: calc(var(--base, 16px) * 0.75);
128
+ border-top: 1px solid var(--theme-elevation-150);
129
+ }
130
+
131
+ /* ── Row label & badge ──────────────────────────────────────────────────── */
132
+ .sbf-row__label {
133
+ flex: 1;
134
+ font-size: 13px;
135
+ line-height: 20px;
136
+ font-weight: 400;
137
+ color: var(--theme-text, var(--theme-elevation-800));
138
+ font-family: var(--font-body);
139
+ overflow: hidden;
140
+ text-overflow: ellipsis;
141
+ white-space: nowrap;
142
+ }
143
+ .sbf-row__label--empty {
144
+ color: var(--theme-elevation-400);
145
+ font-style: italic;
146
+ }
147
+
148
+ .sbf-type-badge {
149
+ display: inline-flex;
150
+ align-items: center;
151
+ padding: 2px 8px;
152
+ border-radius: 3px;
153
+ font-size: 11px;
154
+ font-weight: 500;
155
+ font-family: var(--font-body);
156
+ letter-spacing: 0.02em;
157
+ white-space: nowrap;
158
+ background: var(--theme-elevation-150);
159
+ color: var(--theme-elevation-600);
160
+ flex-shrink: 0;
161
+ }
162
+
163
+ /* ── Icon action button mirrors .collapsible__actions ─────────────────── */
164
+ .sbf-icon-btn {
165
+ display: flex;
166
+ align-items: center;
167
+ justify-content: center;
168
+ width: 24px;
169
+ height: 24px;
170
+ background: transparent;
171
+ border: none;
172
+ border-radius: var(--style-radius-s, 4px);
173
+ cursor: pointer;
174
+ color: var(--theme-elevation-500);
175
+ font-size: 13px;
176
+ padding: 0;
177
+ flex-shrink: 0;
178
+ font-family: var(--font-body);
179
+ transition: background 0.1s, color 0.1s;
180
+ line-height: 1;
181
+ }
182
+ .sbf-icon-btn:hover {
183
+ background: var(--theme-elevation-150);
184
+ color: var(--theme-elevation-900);
185
+ }
186
+ .sbf-icon-btn--danger:hover {
187
+ background: var(--theme-error-50, rgba(239, 68, 68, 0.08));
188
+ color: var(--theme-error-500, #ef4444);
189
+ }
190
+
191
+ /* ── 2-column grid ──────────────────────────────────────────────────────── */
192
+ .sbf-grid-2 {
193
+ display: grid;
194
+ grid-template-columns: 1fr 1fr;
195
+ gap: calc(var(--base, 16px) * 0.75);
196
+ }
197
+
198
+ /* ── Checkbox row ───────────────────────────────────────────────────────── */
199
+ .sbf-checkbox-wrap {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: 8px;
203
+ cursor: pointer;
204
+ }
205
+ .sbf-checkbox-wrap input[type='checkbox'] {
206
+ width: 16px;
207
+ height: 16px;
208
+ flex-shrink: 0;
209
+ cursor: pointer;
210
+ border: 1px solid var(--theme-elevation-300);
211
+ border-radius: 2px;
212
+ accent-color: var(--theme-success-500, #22c55e);
213
+ }
214
+ .sbf-checkbox-label {
215
+ font-size: 13px;
216
+ line-height: 20px;
217
+ color: var(--theme-elevation-800);
218
+ font-family: var(--font-body);
219
+ cursor: pointer;
220
+ }
221
+
222
+ /* ── Flags row ──────────────────────────────────────────────────────────── */
223
+ .sbf-flags-row {
224
+ display: flex;
225
+ gap: calc(var(--base, 16px) * 1.5);
226
+ flex-wrap: wrap;
227
+ }
228
+
229
+ /* ── Section accordion (Admin settings / Conditions) ────────────────────── */
230
+ .sbf-section {
231
+ border: 1px solid var(--theme-elevation-100);
232
+ border-radius: var(--style-radius-s, 4px);
233
+ overflow: hidden;
234
+ }
235
+ .sbf-section__toggle {
236
+ width: 100%;
237
+ display: flex;
238
+ align-items: center;
239
+ justify-content: space-between;
240
+ padding: 8px 12px;
241
+ background: var(--theme-elevation-50);
242
+ border: none;
243
+ cursor: pointer;
244
+ font-size: 13px;
245
+ font-weight: 400;
246
+ font-family: var(--font-body);
247
+ color: var(--theme-elevation-600);
248
+ line-height: 20px;
249
+ text-align: left;
250
+ transition: background 0.1s;
251
+ gap: 8px;
252
+ }
253
+ .sbf-section__toggle:hover { background: var(--theme-elevation-100); }
254
+ .sbf-section__toggle-icon {
255
+ font-size: 10px;
256
+ color: var(--theme-elevation-400);
257
+ flex-shrink: 0;
258
+ transition: transform 0.15s;
259
+ }
260
+ .sbf-section__toggle--open .sbf-section__toggle-icon { transform: rotate(90deg); }
261
+ .sbf-section__body {
262
+ padding: 12px;
263
+ background: var(--theme-elevation-0);
264
+ display: flex;
265
+ flex-direction: column;
266
+ gap: calc(var(--base, 16px) * 0.75);
267
+ border-top: 1px solid var(--theme-elevation-100);
268
+ }
269
+
270
+ /* ── Nested fields ──────────────────────────────────────────────────────── */
271
+ .sbf-nested {
272
+ border-left: 2px solid var(--theme-elevation-200);
273
+ padding-left: 12px;
274
+ margin-top: 4px;
275
+ display: flex;
276
+ flex-direction: column;
277
+ gap: calc(var(--base, 16px) / 2);
278
+ }
279
+
280
+ /* ── Options row ────────────────────────────────────────────────────────── */
281
+ .sbf-options-row {
282
+ display: grid;
283
+ grid-template-columns: 1fr 1fr auto;
284
+ gap: calc(var(--base, 16px) * 0.5);
285
+ align-items: center;
286
+ }
287
+
288
+ /* ── Conditions grid ────────────────────────────────────────────────────── */
289
+ .sbf-conditions-grid {
290
+ display: grid;
291
+ grid-template-columns: 1fr 1fr 1fr auto;
292
+ gap: calc(var(--base, 16px) * 0.5);
293
+ align-items: end;
294
+ }
295
+
296
+ /* ── Add Field button mirrors Payload array add-row ───────────────────── */
297
+ .sbf-add-btn {
298
+ display: inline-flex;
299
+ align-items: center;
300
+ gap: 6px;
301
+ padding: 0;
302
+ background: none;
303
+ border: none;
304
+ cursor: pointer;
305
+ color: var(--theme-elevation-400);
306
+ font-size: 13px;
307
+ font-family: var(--font-body);
308
+ line-height: 24px;
309
+ transition: color 0.1s;
310
+ margin-top: 2px;
311
+ }
312
+ .sbf-add-btn:hover:not(:disabled) { color: var(--theme-elevation-800); }
313
+ .sbf-add-btn:disabled { cursor: not-allowed; opacity: 0.5; }
314
+ .sbf-add-btn__icon {
315
+ display: flex;
316
+ align-items: center;
317
+ justify-content: center;
318
+ width: 24px;
319
+ height: 24px;
320
+ border: 1px solid currentColor;
321
+ border-radius: 50%;
322
+ font-size: 14px;
323
+ font-weight: 600;
324
+ flex-shrink: 0;
325
+ line-height: 1;
326
+ transition: border-color 0.1s;
327
+ }
328
+
329
+ .sbf-add-btn--small { font-size: 12px; gap: 5px; }
330
+ .sbf-add-btn--small .sbf-add-btn__icon { width: 18px; height: 18px; font-size: 12px; }
331
+
332
+ /* ── Section heading ────────────────────────────────────────────────────── */
333
+ .sbf-section-heading {
334
+ display: flex;
335
+ align-items: center;
336
+ justify-content: space-between;
337
+ margin-bottom: calc(var(--base, 16px) / 2);
338
+ }
339
+ .sbf-section-label {
340
+ display: flex;
341
+ align-items: center;
342
+ color: var(--theme-elevation-800);
343
+ font-family: var(--font-body);
344
+ font-size: 13px;
345
+ line-height: 20px;
346
+ font-weight: 400;
347
+ }
348
+
349
+ /* ── Empty state ────────────────────────────────────────────────────────── */
350
+ .sbf-empty {
351
+ padding: calc(var(--base, 16px) * 1.5) var(--base, 16px);
352
+ border: 1px dashed var(--theme-elevation-200);
353
+ border-radius: var(--style-radius-s, 4px);
354
+ text-align: center;
355
+ color: var(--theme-elevation-400);
356
+ font-size: 13px;
357
+ font-family: var(--font-body);
358
+ line-height: 20px;
359
+ }
360
+
361
+