@squaredr/fieldcraft-pro 1.7.0 → 1.8.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,466 +1,468 @@
1
- /* FieldCraft Pro Theme Editor
2
- Chrome theming uses shadcn variable names (--background, --foreground, etc.)
3
- matching FormBuilder and ResponseViewer for consistent host page inheritance.
4
-
5
- 1. ThemeEditorThemeProvider wraps children in <div data-fcte-root="" style={cssVars}>
6
- 2. --fcte-* variables reference shadcn vars via var(--shadcn-var, fallback)
7
- 3. Host page :root variables naturally cascade through
8
- 4. Provider inline styles override everything when a theme prop is passed
9
- 5. All editor chrome references var(--fcte-*) — fully themeable
10
- */
11
-
12
- /* ─── Provider root ─────────────────────────────────────────────── */
13
- .fcte-provider-root {
14
- width: 100%;
15
- height: 100%;
16
- }
17
-
18
- /* ─── Default theme variables ──────────────────────────────────── */
19
- /* References shadcn variable names so the chrome inherits from any
20
- host page that defines --background, --foreground, --card, etc.
21
- Fallback values are Drafting Teal light defaults. */
22
- [data-fcte-root] {
23
- --fcte-bg: var(--background, #F4F7F8);
24
- --fcte-surface: var(--card, #FFFFFF);
25
- --fcte-surface-hover: var(--accent, #EDF3F2);
26
- --fcte-text: var(--foreground, #12222A);
27
- --fcte-text-muted: var(--muted-foreground, #6A7B85);
28
- --fcte-text-dim: var(--muted-foreground, #96A5AD);
29
- --fcte-border: var(--border, #DCE4E8);
30
- --fcte-border-strong: var(--border, #B9D1CF);
31
- --fcte-input-bg: var(--card, #FAFCFC);
32
- --fcte-accent: var(--primary, #1F6B6E);
33
- --fcte-accent-text: var(--primary-foreground, #FFFFFF);
34
- }
35
-
36
- /* ─── Root element ──────────────────────────────────────────────── */
37
- .fcte-root {
38
- display: flex;
39
- flex-direction: column;
40
- font-family: system-ui, -apple-system, sans-serif;
41
- font-size: 13px;
42
- color: var(--fcte-text);
43
- background: var(--fcte-bg);
44
- overflow: hidden;
45
- }
46
-
47
- /* ─── Toolbar ───────────────────────────────────────────────────── */
48
- .fcte-toolbar {
49
- display: flex;
50
- align-items: center;
51
- justify-content: space-between;
52
- padding: 8px 12px;
53
- border-bottom: 1px solid var(--fcte-border);
54
- background: var(--fcte-surface);
55
- gap: 8px;
56
- flex-shrink: 0;
57
- }
58
-
59
- .fcte-toolbar__left {
60
- display: flex;
61
- align-items: center;
62
- gap: 12px;
63
- }
64
-
65
- .fcte-toolbar__right {
66
- display: flex;
67
- align-items: center;
68
- gap: 8px;
69
- }
70
-
71
- .fcte-toolbar__title {
72
- font-weight: 600;
73
- font-size: 14px;
74
- white-space: nowrap;
75
- }
76
-
77
- .fcte-toolbar__preset {
78
- padding: 4px 8px;
79
- border-radius: 0;
80
- border: 1px solid var(--fcte-border-strong);
81
- background: var(--fcte-input-bg);
82
- color: var(--fcte-text);
83
- font-size: 12px;
84
- cursor: pointer;
85
- }
86
-
87
- /* ─── Buttons ───────────────────────────────────────────────────── */
88
- .fcte-btn {
89
- padding: 5px 12px;
90
- border-radius: 0;
91
- border: none;
92
- font-size: 12px;
93
- font-weight: 500;
94
- cursor: pointer;
95
- white-space: nowrap;
96
- }
97
-
98
- .fcte-btn--primary {
99
- background: var(--fcte-accent);
100
- color: var(--fcte-accent-text);
101
- }
102
-
103
- .fcte-btn--primary:hover {
104
- opacity: 0.9;
105
- }
106
-
107
- .fcte-btn--secondary {
108
- background: var(--fcte-input-bg);
109
- color: var(--fcte-text);
110
- border: 1px solid var(--fcte-border-strong);
111
- }
112
-
113
- .fcte-btn--secondary:hover {
114
- background: var(--fcte-surface-hover);
115
- }
116
-
117
- .fcte-btn--sm {
118
- padding: 3px 8px;
119
- font-size: 11px;
120
- }
121
-
122
- /* ─── Body split ────────────────────────────────────────────────── */
123
- .fcte-body {
124
- display: flex;
125
- flex: 1;
126
- min-height: 0;
127
- overflow: hidden;
128
- }
129
-
130
- /* ─── Editor panel ──────────────────────────────────────────────── */
131
- .fcte-editor {
132
- width: 320px;
133
- min-width: 280px;
134
- display: flex;
135
- flex-direction: column;
136
- border-right: 1px solid var(--fcte-border);
137
- background: var(--fcte-surface);
138
- }
139
-
140
- /* ─── Section selector dropdown ─────────────────────────────────── */
141
- .fcte-section-select {
142
- padding: 8px 12px;
143
- border-bottom: 1px solid var(--fcte-border);
144
- flex-shrink: 0;
145
- }
146
-
147
- .fcte-section-select .fcte-field__select {
148
- font-weight: 600;
149
- font-size: 13px;
150
- }
151
-
152
- /* ─── Fields area ───────────────────────────────────────────────── */
153
- .fcte-fields {
154
- flex: 1;
155
- overflow-y: auto;
156
- padding: 12px;
157
- display: flex;
158
- flex-direction: column;
159
- gap: 10px;
160
- }
161
-
162
- /* ─── Individual field ──────────────────────────────────────────── */
163
- .fcte-field {
164
- display: flex;
165
- flex-direction: column;
166
- gap: 4px;
167
- }
168
-
169
- .fcte-field__label {
170
- font-size: 11px;
171
- font-weight: 500;
172
- color: var(--fcte-text-muted);
173
- text-transform: uppercase;
174
- letter-spacing: 0.03em;
175
- }
176
-
177
- .fcte-field__color-row {
178
- display: flex;
179
- align-items: center;
180
- gap: 6px;
181
- }
182
-
183
- .fcte-field__swatch {
184
- width: 28px;
185
- height: 28px;
186
- border: 1px solid var(--fcte-border-strong);
187
- border-radius: 0;
188
- padding: 0;
189
- cursor: pointer;
190
- background: none;
191
- flex-shrink: 0;
192
- }
193
-
194
- .fcte-field__swatch::-webkit-color-swatch-wrapper {
195
- padding: 2px;
196
- }
197
-
198
- .fcte-field__swatch::-webkit-color-swatch {
199
- border: none;
200
- border-radius: 0;
201
- }
202
-
203
- .fcte-field__text,
204
- .fcte-field__select,
205
- .fcte-field__number {
206
- padding: 5px 8px;
207
- border-radius: 0;
208
- border: 1px solid var(--fcte-border-strong);
209
- background: var(--fcte-input-bg);
210
- color: var(--fcte-text);
211
- font-size: 12px;
212
- font-family: inherit;
213
- width: 100%;
214
- box-sizing: border-box;
215
- }
216
-
217
- .fcte-field__text:focus,
218
- .fcte-field__select:focus,
219
- .fcte-field__number:focus {
220
- outline: none;
221
- border-color: var(--fcte-accent);
222
- }
223
-
224
- .fcte-field__number-row {
225
- display: flex;
226
- align-items: center;
227
- gap: 4px;
228
- }
229
-
230
- .fcte-field__number-row .fcte-field__number {
231
- width: 80px;
232
- flex-shrink: 0;
233
- }
234
-
235
- .fcte-field__suffix {
236
- font-size: 11px;
237
- color: var(--fcte-text-dim);
238
- }
239
-
240
- /* ─── Preview panel ─────────────────────────────────────────────── */
241
- .fcte-preview {
242
- flex: 1;
243
- overflow: auto;
244
- background: var(--fcte-bg);
245
- }
246
-
247
- .fcte-preview__inner {
248
- padding: 24px;
249
- min-height: 100%;
250
- }
251
-
252
- /* ─── Palette Generator ─────────────────────────────────────────── */
253
- .fcte-palette {
254
- border-bottom: 1px solid var(--fcte-border);
255
- background: var(--fcte-surface);
256
- }
257
-
258
- .fcte-palette__header {
259
- display: flex;
260
- align-items: center;
261
- justify-content: space-between;
262
- padding: 8px 12px;
263
- border-bottom: 1px solid var(--fcte-border);
264
- }
265
-
266
- .fcte-palette__title {
267
- font-size: 12px;
268
- font-weight: 600;
269
- }
270
-
271
- .fcte-palette__body {
272
- padding: 12px;
273
- display: flex;
274
- flex-direction: column;
275
- gap: 12px;
276
- }
277
-
278
- .fcte-palette__picker {
279
- display: flex;
280
- flex-direction: column;
281
- gap: 4px;
282
- }
283
-
284
- .fcte-palette__label {
285
- font-size: 11px;
286
- font-weight: 500;
287
- color: var(--fcte-text-muted);
288
- text-transform: uppercase;
289
- letter-spacing: 0.03em;
290
- }
291
-
292
- .fcte-palette__input-row {
293
- display: flex;
294
- align-items: center;
295
- gap: 6px;
296
- }
297
-
298
- .fcte-palette__input-row .fcte-field__text {
299
- width: 120px;
300
- }
301
-
302
- .fcte-palette__swatches {
303
- display: flex;
304
- flex-wrap: wrap;
305
- gap: 8px;
306
- }
307
-
308
- .fcte-palette__swatch {
309
- display: flex;
310
- flex-direction: column;
311
- align-items: center;
312
- gap: 3px;
313
- width: 56px;
314
- }
315
-
316
- .fcte-palette__swatch-color {
317
- width: 40px;
318
- height: 28px;
319
- border-radius: 0;
320
- border: 1px solid var(--fcte-border-strong);
321
- }
322
-
323
- .fcte-palette__swatch-label {
324
- font-size: 10px;
325
- color: var(--fcte-text-muted);
326
- text-align: center;
327
- }
328
-
329
- .fcte-palette__swatch-hex {
330
- font-size: 9px;
331
- color: var(--fcte-text-dim);
332
- font-family: monospace;
333
- }
334
-
335
- /* ─── Theme Comparison ──────────────────────────────────────────── */
336
- .fcte-compare {
337
- flex: 1;
338
- display: flex;
339
- flex-direction: column;
340
- min-height: 0;
341
- overflow: hidden;
342
- }
343
-
344
- .fcte-compare__header {
345
- display: flex;
346
- align-items: center;
347
- justify-content: space-between;
348
- padding: 8px 12px;
349
- border-bottom: 1px solid var(--fcte-border);
350
- background: var(--fcte-surface);
351
- flex-shrink: 0;
352
- }
353
-
354
- .fcte-compare__title {
355
- font-size: 12px;
356
- font-weight: 600;
357
- }
358
-
359
- .fcte-compare__controls {
360
- display: flex;
361
- align-items: center;
362
- gap: 8px;
363
- }
364
-
365
- .fcte-compare__label {
366
- font-size: 11px;
367
- color: var(--fcte-text-muted);
368
- }
369
-
370
- .fcte-compare__diffs {
371
- padding: 8px 12px;
372
- border-bottom: 1px solid var(--fcte-border);
373
- background: var(--fcte-surface);
374
- flex-shrink: 0;
375
- }
376
-
377
- .fcte-compare__diff-count {
378
- font-size: 11px;
379
- font-weight: 600;
380
- color: var(--fcte-text-muted);
381
- display: block;
382
- margin-bottom: 6px;
383
- }
384
-
385
- .fcte-compare__diff-list {
386
- display: flex;
387
- flex-wrap: wrap;
388
- gap: 6px;
389
- }
390
-
391
- .fcte-compare__diff-item {
392
- display: flex;
393
- align-items: center;
394
- gap: 4px;
395
- padding: 2px 6px;
396
- border-radius: 0;
397
- background: var(--fcte-input-bg);
398
- border: 1px solid var(--fcte-border);
399
- font-size: 10px;
400
- }
401
-
402
- .fcte-compare__diff-label {
403
- color: var(--fcte-text-muted);
404
- font-size: 10px;
405
- }
406
-
407
- .fcte-compare__diff-swatches {
408
- display: flex;
409
- align-items: center;
410
- gap: 2px;
411
- }
412
-
413
- .fcte-compare__diff-swatch {
414
- width: 14px;
415
- height: 14px;
416
- border-radius: 0;
417
- border: 1px solid var(--fcte-border-strong);
418
- }
419
-
420
- .fcte-compare__diff-arrow {
421
- font-size: 9px;
422
- color: var(--fcte-text-dim);
423
- }
424
-
425
- .fcte-compare__diff-more {
426
- font-size: 10px;
427
- color: var(--fcte-text-dim);
428
- align-self: center;
429
- }
430
-
431
- .fcte-compare__panels {
432
- display: flex;
433
- flex: 1;
434
- min-height: 0;
435
- overflow: hidden;
436
- }
437
-
438
- .fcte-compare__panel {
439
- flex: 1;
440
- display: flex;
441
- flex-direction: column;
442
- min-width: 0;
443
- overflow: hidden;
444
- }
445
-
446
- .fcte-compare__panel + .fcte-compare__panel {
447
- border-left: 1px solid var(--fcte-border);
448
- }
449
-
450
- .fcte-compare__panel-label {
451
- padding: 6px 12px;
452
- font-size: 11px;
453
- font-weight: 600;
454
- color: var(--fcte-text-muted);
455
- text-transform: uppercase;
456
- letter-spacing: 0.03em;
457
- border-bottom: 1px solid var(--fcte-border);
458
- background: var(--fcte-surface);
459
- flex-shrink: 0;
460
- }
461
-
462
- .fcte-compare__panel-preview {
463
- flex: 1;
464
- overflow: auto;
465
- padding: 16px;
466
- }
1
+ /* FieldCraft Pro Theme Editor
2
+ Chrome theming uses shadcn variable names (--background, --foreground, etc.)
3
+ matching FormBuilder and ResponseViewer for consistent host page inheritance.
4
+
5
+ 1. ThemeEditorThemeProvider wraps children in <div data-fcte-root="" style={cssVars}>
6
+ 2. --fcte-* variables reference shadcn vars via var(--shadcn-var, fallback)
7
+ 3. Host page :root variables naturally cascade through
8
+ 4. Provider inline styles override everything when a theme prop is passed
9
+ 5. All editor chrome references var(--fcte-*) — fully themeable
10
+ */
11
+
12
+ /* ─── Provider root ─────────────────────────────────────────────── */
13
+ .fcte-provider-root {
14
+ width: 100%;
15
+ height: 100%;
16
+ }
17
+
18
+ /* ─── Default theme variables ──────────────────────────────────── */
19
+ /* References shadcn variable names so the chrome inherits from any
20
+ host page that defines --background, --foreground, --card, etc.
21
+ Fallback values are Drafting Teal light defaults. */
22
+ [data-fcte-root] {
23
+ --fcte-bg: var(--background, #F4F7F8);
24
+ --fcte-surface: var(--card, #FFFFFF);
25
+ --fcte-surface-hover: var(--accent, #EDF3F2);
26
+ --fcte-text: var(--foreground, #12222A);
27
+ --fcte-text-muted: var(--muted-foreground, #6A7B85);
28
+ --fcte-text-dim: var(--muted-foreground, #96A5AD);
29
+ --fcte-border: var(--border, #DCE4E8);
30
+ --fcte-border-strong: var(--border, #B9D1CF);
31
+ --fcte-input-bg: var(--card, #FAFCFC);
32
+ --fcte-accent: var(--primary, #1F6B6E);
33
+ --fcte-accent-text: var(--primary-foreground, #FFFFFF);
34
+ }
35
+
36
+ /* ─── Root element ──────────────────────────────────────────────── */
37
+ .fcte-root {
38
+ display: flex;
39
+ flex-direction: column;
40
+ font-family: system-ui, -apple-system, sans-serif;
41
+ font-size: 13px;
42
+ color: var(--fcte-text);
43
+ background: var(--fcte-bg);
44
+ overflow: hidden;
45
+ }
46
+
47
+ /* ─── Toolbar ───────────────────────────────────────────────────── */
48
+ .fcte-toolbar {
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: space-between;
52
+ padding: 8px 12px;
53
+ border-bottom: 1px solid var(--fcte-border);
54
+ background: var(--fcte-surface);
55
+ gap: 8px;
56
+ flex-shrink: 0;
57
+ }
58
+
59
+ .fcte-toolbar__left {
60
+ display: flex;
61
+ align-items: center;
62
+ gap: 12px;
63
+ }
64
+
65
+ .fcte-toolbar__right {
66
+ display: flex;
67
+ align-items: center;
68
+ gap: 8px;
69
+ }
70
+
71
+ .fcte-toolbar__title {
72
+ font-weight: 600;
73
+ font-size: 14px;
74
+ white-space: nowrap;
75
+ }
76
+
77
+ .fcte-toolbar__preset {
78
+ padding: 4px 8px;
79
+ border-radius: 0;
80
+ border: 1px solid var(--fcte-border-strong);
81
+ background: var(--fcte-input-bg);
82
+ color: var(--fcte-text);
83
+ font-size: 12px;
84
+ cursor: pointer;
85
+ }
86
+
87
+ /* ─── Buttons ───────────────────────────────────────────────────── */
88
+ .fcte-btn {
89
+ padding: 5px 12px;
90
+ border-radius: 0;
91
+ border: none;
92
+ font-size: 12px;
93
+ font-weight: 500;
94
+ cursor: pointer;
95
+ white-space: nowrap;
96
+ }
97
+
98
+ .fcte-btn--primary {
99
+ background: var(--fcte-accent);
100
+ color: var(--fcte-accent-text);
101
+ }
102
+
103
+ .fcte-btn--primary:hover {
104
+ opacity: 0.9;
105
+ }
106
+
107
+ .fcte-btn--secondary {
108
+ background: var(--fcte-input-bg);
109
+ color: var(--fcte-text);
110
+ border: 1px solid var(--fcte-border-strong);
111
+ }
112
+
113
+ .fcte-btn--secondary:hover {
114
+ background: var(--fcte-surface-hover);
115
+ }
116
+
117
+ .fcte-btn--sm {
118
+ padding: 3px 8px;
119
+ font-size: 11px;
120
+ }
121
+
122
+ /* ─── Body split ────────────────────────────────────────────────── */
123
+ .fcte-body {
124
+ display: flex;
125
+ flex: 1;
126
+ min-height: 0;
127
+ overflow: hidden;
128
+ }
129
+
130
+ /* ─── Editor panel ──────────────────────────────────────────────── */
131
+ .fcte-editor {
132
+ width: 320px;
133
+ min-width: 280px;
134
+ flex-shrink: 0;
135
+ display: flex;
136
+ flex-direction: column;
137
+ border-right: 1px solid var(--fcte-border);
138
+ background: var(--fcte-surface);
139
+ overflow: hidden;
140
+ }
141
+
142
+ /* ─── Section selector dropdown ─────────────────────────────────── */
143
+ .fcte-section-select {
144
+ padding: 8px 12px;
145
+ border-bottom: 1px solid var(--fcte-border);
146
+ flex-shrink: 0;
147
+ }
148
+
149
+ .fcte-section-select .fcte-field__select {
150
+ font-weight: 600;
151
+ font-size: 13px;
152
+ }
153
+
154
+ /* ─── Fields area ───────────────────────────────────────────────── */
155
+ .fcte-fields {
156
+ flex: 1;
157
+ overflow-y: auto;
158
+ padding: 12px;
159
+ display: flex;
160
+ flex-direction: column;
161
+ gap: 10px;
162
+ }
163
+
164
+ /* ─── Individual field ──────────────────────────────────────────── */
165
+ .fcte-field {
166
+ display: flex;
167
+ flex-direction: column;
168
+ gap: 4px;
169
+ }
170
+
171
+ .fcte-field__label {
172
+ font-size: 11px;
173
+ font-weight: 500;
174
+ color: var(--fcte-text-muted);
175
+ text-transform: uppercase;
176
+ letter-spacing: 0.03em;
177
+ }
178
+
179
+ .fcte-field__color-row {
180
+ display: flex;
181
+ align-items: center;
182
+ gap: 6px;
183
+ }
184
+
185
+ .fcte-field__swatch {
186
+ width: 28px;
187
+ height: 28px;
188
+ border: 1px solid var(--fcte-border-strong);
189
+ border-radius: 0;
190
+ padding: 0;
191
+ cursor: pointer;
192
+ background: none;
193
+ flex-shrink: 0;
194
+ }
195
+
196
+ .fcte-field__swatch::-webkit-color-swatch-wrapper {
197
+ padding: 2px;
198
+ }
199
+
200
+ .fcte-field__swatch::-webkit-color-swatch {
201
+ border: none;
202
+ border-radius: 0;
203
+ }
204
+
205
+ .fcte-field__text,
206
+ .fcte-field__select,
207
+ .fcte-field__number {
208
+ padding: 5px 8px;
209
+ border-radius: 0;
210
+ border: 1px solid var(--fcte-border-strong);
211
+ background: var(--fcte-input-bg);
212
+ color: var(--fcte-text);
213
+ font-size: 12px;
214
+ font-family: inherit;
215
+ width: 100%;
216
+ box-sizing: border-box;
217
+ }
218
+
219
+ .fcte-field__text:focus,
220
+ .fcte-field__select:focus,
221
+ .fcte-field__number:focus {
222
+ outline: none;
223
+ border-color: var(--fcte-accent);
224
+ }
225
+
226
+ .fcte-field__number-row {
227
+ display: flex;
228
+ align-items: center;
229
+ gap: 4px;
230
+ }
231
+
232
+ .fcte-field__number-row .fcte-field__number {
233
+ width: 80px;
234
+ flex-shrink: 0;
235
+ }
236
+
237
+ .fcte-field__suffix {
238
+ font-size: 11px;
239
+ color: var(--fcte-text-dim);
240
+ }
241
+
242
+ /* ─── Preview panel ─────────────────────────────────────────────── */
243
+ .fcte-preview {
244
+ flex: 1;
245
+ overflow: auto;
246
+ background: var(--fcte-bg);
247
+ }
248
+
249
+ .fcte-preview__inner {
250
+ padding: 24px;
251
+ min-height: 100%;
252
+ }
253
+
254
+ /* ─── Palette Generator ─────────────────────────────────────────── */
255
+ .fcte-palette {
256
+ border-bottom: 1px solid var(--fcte-border);
257
+ background: var(--fcte-surface);
258
+ }
259
+
260
+ .fcte-palette__header {
261
+ display: flex;
262
+ align-items: center;
263
+ justify-content: space-between;
264
+ padding: 8px 12px;
265
+ border-bottom: 1px solid var(--fcte-border);
266
+ }
267
+
268
+ .fcte-palette__title {
269
+ font-size: 12px;
270
+ font-weight: 600;
271
+ }
272
+
273
+ .fcte-palette__body {
274
+ padding: 12px;
275
+ display: flex;
276
+ flex-direction: column;
277
+ gap: 12px;
278
+ }
279
+
280
+ .fcte-palette__picker {
281
+ display: flex;
282
+ flex-direction: column;
283
+ gap: 4px;
284
+ }
285
+
286
+ .fcte-palette__label {
287
+ font-size: 11px;
288
+ font-weight: 500;
289
+ color: var(--fcte-text-muted);
290
+ text-transform: uppercase;
291
+ letter-spacing: 0.03em;
292
+ }
293
+
294
+ .fcte-palette__input-row {
295
+ display: flex;
296
+ align-items: center;
297
+ gap: 6px;
298
+ }
299
+
300
+ .fcte-palette__input-row .fcte-field__text {
301
+ width: 120px;
302
+ }
303
+
304
+ .fcte-palette__swatches {
305
+ display: flex;
306
+ flex-wrap: wrap;
307
+ gap: 8px;
308
+ }
309
+
310
+ .fcte-palette__swatch {
311
+ display: flex;
312
+ flex-direction: column;
313
+ align-items: center;
314
+ gap: 3px;
315
+ width: 56px;
316
+ }
317
+
318
+ .fcte-palette__swatch-color {
319
+ width: 40px;
320
+ height: 28px;
321
+ border-radius: 0;
322
+ border: 1px solid var(--fcte-border-strong);
323
+ }
324
+
325
+ .fcte-palette__swatch-label {
326
+ font-size: 10px;
327
+ color: var(--fcte-text-muted);
328
+ text-align: center;
329
+ }
330
+
331
+ .fcte-palette__swatch-hex {
332
+ font-size: 9px;
333
+ color: var(--fcte-text-dim);
334
+ font-family: monospace;
335
+ }
336
+
337
+ /* ─── Theme Comparison ──────────────────────────────────────────── */
338
+ .fcte-compare {
339
+ flex: 1;
340
+ display: flex;
341
+ flex-direction: column;
342
+ min-height: 0;
343
+ overflow: hidden;
344
+ }
345
+
346
+ .fcte-compare__header {
347
+ display: flex;
348
+ align-items: center;
349
+ justify-content: space-between;
350
+ padding: 8px 12px;
351
+ border-bottom: 1px solid var(--fcte-border);
352
+ background: var(--fcte-surface);
353
+ flex-shrink: 0;
354
+ }
355
+
356
+ .fcte-compare__title {
357
+ font-size: 12px;
358
+ font-weight: 600;
359
+ }
360
+
361
+ .fcte-compare__controls {
362
+ display: flex;
363
+ align-items: center;
364
+ gap: 8px;
365
+ }
366
+
367
+ .fcte-compare__label {
368
+ font-size: 11px;
369
+ color: var(--fcte-text-muted);
370
+ }
371
+
372
+ .fcte-compare__diffs {
373
+ padding: 8px 12px;
374
+ border-bottom: 1px solid var(--fcte-border);
375
+ background: var(--fcte-surface);
376
+ flex-shrink: 0;
377
+ }
378
+
379
+ .fcte-compare__diff-count {
380
+ font-size: 11px;
381
+ font-weight: 600;
382
+ color: var(--fcte-text-muted);
383
+ display: block;
384
+ margin-bottom: 6px;
385
+ }
386
+
387
+ .fcte-compare__diff-list {
388
+ display: flex;
389
+ flex-wrap: wrap;
390
+ gap: 6px;
391
+ }
392
+
393
+ .fcte-compare__diff-item {
394
+ display: flex;
395
+ align-items: center;
396
+ gap: 4px;
397
+ padding: 2px 6px;
398
+ border-radius: 0;
399
+ background: var(--fcte-input-bg);
400
+ border: 1px solid var(--fcte-border);
401
+ font-size: 10px;
402
+ }
403
+
404
+ .fcte-compare__diff-label {
405
+ color: var(--fcte-text-muted);
406
+ font-size: 10px;
407
+ }
408
+
409
+ .fcte-compare__diff-swatches {
410
+ display: flex;
411
+ align-items: center;
412
+ gap: 2px;
413
+ }
414
+
415
+ .fcte-compare__diff-swatch {
416
+ width: 14px;
417
+ height: 14px;
418
+ border-radius: 0;
419
+ border: 1px solid var(--fcte-border-strong);
420
+ }
421
+
422
+ .fcte-compare__diff-arrow {
423
+ font-size: 9px;
424
+ color: var(--fcte-text-dim);
425
+ }
426
+
427
+ .fcte-compare__diff-more {
428
+ font-size: 10px;
429
+ color: var(--fcte-text-dim);
430
+ align-self: center;
431
+ }
432
+
433
+ .fcte-compare__panels {
434
+ display: flex;
435
+ flex: 1;
436
+ min-height: 0;
437
+ overflow: hidden;
438
+ }
439
+
440
+ .fcte-compare__panel {
441
+ flex: 1;
442
+ display: flex;
443
+ flex-direction: column;
444
+ min-width: 0;
445
+ overflow: hidden;
446
+ }
447
+
448
+ .fcte-compare__panel + .fcte-compare__panel {
449
+ border-left: 1px solid var(--fcte-border);
450
+ }
451
+
452
+ .fcte-compare__panel-label {
453
+ padding: 6px 12px;
454
+ font-size: 11px;
455
+ font-weight: 600;
456
+ color: var(--fcte-text-muted);
457
+ text-transform: uppercase;
458
+ letter-spacing: 0.03em;
459
+ border-bottom: 1px solid var(--fcte-border);
460
+ background: var(--fcte-surface);
461
+ flex-shrink: 0;
462
+ }
463
+
464
+ .fcte-compare__panel-preview {
465
+ flex: 1;
466
+ overflow: auto;
467
+ padding: 16px;
468
+ }