PluginProbe ʕ •ᴥ•ʔ
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI / 3.6.0
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI v3.6.0
3.6.0 3.5.3 3.5.2 3.5.1 3.5.0 3.4.8 3.4.7 3.4.6 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5.1 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.10 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.6.1 1.6.7 1.7.0 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.2 1.7.2.1 1.7.2.2 1.7.3 1.7.4 1.7.5 1.7.5.1 1.7.5.2 1.7.6 1.7.7 1.7.7.1 1.7.7.2 1.7.8 1.7.9 1.8.0 1.8.0.1 1.8.1 1.8.2 1.8.2.1 1.8.2.2 1.8.2.3 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.0.1 1.9.1 1.9.2 1.9.3 1.9.4 1.9.4.1 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.0.1 2.0.1 2.0.2 2.0.3 2.0.3.1 2.0.4 2.0.4.1 2.0.5 2.0.6 2.0.7 2.0.8 2.0.8.1 2.0.9 3.0.0 3.0.0.1 3.0.1 3.0.2 3.0.3 3.0.3.1 3.0.4 3.0.4.1 3.0.4.2 3.0.5 3.0.5.1 3.0.5.2 3.0.6 3.0.6.1 3.0.7.1 3.0.8 3.0.8.1 3.0.9 3.0.9.1 3.0.9.2 3.0.9.3 3.0.9.4 3.0.9.5 3.1.0 3.1.1 3.1.2 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.4.0 3.4.1 3.4.2 3.4.2.1 3.4.3 3.4.4 3.4.5 trunk 1.0 1.0.1 1.0.2 1.0.3
everest-forms / src / style-customizer-v2 / style.scss
everest-forms / src / style-customizer-v2 Last commit date
AiAssistant.tsx 2 days ago App.tsx 2 days ago BuilderSync.ts 2 days ago ControlRenderer.tsx 2 days ago HoverTip.tsx 2 days ago Popover.tsx 2 days ago PreviewBridge.ts 2 days ago PreviewPane.tsx 2 days ago constants.ts 2 days ago cssVars.ts 2 days ago globals.d.ts 2 days ago index.tsx 2 days ago panes.tsx 2 days ago store.ts 2 days ago style.scss 2 days ago types.ts 2 days ago
style.scss
4020 lines
1 /**
2 * Style Customizer v2 — builder panel chrome, scoped under `#everest-forms-panel-style`
3 * (controls + the portaled live preview). Form-styling tokens (`--evf-*`) live in the
4 * preview iframe instead, via the shared `frontend.css` rule template.
5 */
6
7 #everest-forms-panel-style {
8 /* Palette aligned to the Everest Forms builder. */
9 --ui-ink: #23282d;
10 --ui-ink-2: #383838;
11 --ui-ink-3: #6d6d6d;
12 --ui-icon: #6d6d6d;
13 --ui-line: #e1e1e1;
14 --ui-line-2: #edeff7;
15 --ui-input-border: #cdd0d8;
16 --ui-bg: #f0f0f1;
17 --ui-bg-subtle: #f6f7f9;
18 --ui-bg-hover: #fafbfd;
19 --ui-purple: #7545bb;
20 --ui-purple-600: #5317aa;
21 --ui-purple-50: #f6f3fa;
22 --ui-purple-100: #e9e2f3;
23 --ui-red: #dc2626;
24 --ui-red-50: #fef2f2;
25 --ui-green: #15803d;
26 --ui-green-50: #f0fdf4;
27 --ui-amber: #b45309;
28 --ui-amber-50: #fffbeb;
29 --ui-amber-100: #fde68a;
30 --ui-amber-700: #92400e;
31
32 /* Pro-showcase colours — matches the plugin's established "this is Pro" language (evf-locked-fields.scss). */
33 --ui-pro-cta: #7e3bd0;
34 --ui-pro-cta-hover: #6c2fbb;
35 --ui-pro-card-bg: #faf9fb;
36 --ui-pro-card-border: #e8e6ee;
37
38 /* One elevation system, three tiers. */
39 --ui-shadow-sm: 0 1px 2px rgba(20, 23, 40, .06);
40 --ui-shadow: 0 1px 2px rgba(20, 23, 40, .04), 0 12px 28px -8px rgba(20, 23, 40, .08);
41 --ui-shadow-lg: 0 2px 4px rgba(20, 23, 40, .06), 0 20px 44px -14px rgba(20, 23, 40, .22);
42 --ui-focus: 0 0 0 1px #fff, 0 0 0 3px var(--ui-purple);
43 --ui-focus-soft: 0 0 0 2px var(--ui-purple-50);
44
45 /* Border-radius scale — sm for chips/badges, md for inputs/controls, lg for cards. */
46 --ui-radius-sm: 4px;
47 --ui-radius-md: 6px;
48 --ui-radius-lg: 9px;
49
50 /* Type scale (~1.15–1.2×) — every panel font-size should be one of these, not a one-off. */
51 --ui-fs-2xs: 10px;
52 --ui-fs-xs: 11px;
53 --ui-fs-sm: 12.5px;
54 --ui-fs-base: 14px;
55 --ui-fs-md: 16px;
56 --ui-fs-lg: 19px;
57 --ui-fs-xl: 22px;
58
59 /* One shared height for every small inline control, so mixed rows sit on one visual baseline. */
60 --ui-ctrl-h: 32px;
61
62 /* The builder content area holds the preview flush; the sidebar keeps its native chrome. */
63 .everest-forms-panel-content {
64 padding: 0;
65 background: var(--ui-bg);
66 overflow: hidden;
67 }
68
69 *,
70 *::before,
71 *::after {
72 box-sizing: border-box;
73 }
74
75 button:focus-visible,
76 input:focus-visible,
77 select:focus-visible,
78 textarea:focus-visible,
79 [tabindex]]:focus-visible {
80 outline: none;
81 box-shadow: var(--ui-focus);
82 border-radius: 5px;
83 }
84
85 /* Rows/cards with their own border+radius keep it instead of the generic 5px-radius rule above. */
86 .elrow:focus-visible,
87 .pal-card:focus-visible {
88 outline: none;
89 box-shadow: var(--ui-focus-soft);
90 }
91 }
92
93 @media (prefers-reduced-motion: reduce) {
94 #everest-forms-panel-style *,
95 #everest-forms-panel-style *::before,
96 #everest-forms-panel-style *::after {
97 transition: none !important;
98 animation: none !important;
99 }
100 }
101
102 /* ---------- controls (inside the builder's 400px sidebar) ---------- */
103 #everest-forms-panel-style #evf-scv2-controls {
104 height: 100%;
105 }
106
107 #everest-forms-panel-style .scv2-panel {
108 height: 100%;
109 display: flex;
110 flex-direction: column;
111 min-height: 0;
112 min-width: 0;
113 background: #fff;
114 color: var(--ui-ink-2);
115 font-size: 13px;
116 line-height: 1.5;
117 }
118
119 #everest-forms-panel-style .scv2-panel button {
120 font-family: inherit;
121 }
122
123 #everest-forms-panel-style .evfscv2-boot {
124 padding: 30px;
125 color: var(--ui-ink-3);
126 font-size: 13px;
127 }
128
129 /* Sub-tabs mirror the builder's Fields panel tab bar (`.everest-forms-fields-tab` in admin.scss). */
130 #everest-forms-panel-style .subtabs {
131 display: flex;
132 align-items: stretch;
133 padding: 0;
134 gap: 0;
135 flex: none;
136 background: var(--ui-bg-subtle);
137 }
138
139 #everest-forms-panel-style .subtabs-main {
140 display: flex;
141 flex: 1;
142 min-width: 0;
143 }
144
145 /* Undo/redo: a small, always-visible icon pair beside the tabs (global across all sub-panes). */
146 #everest-forms-panel-style .subtabs-actions {
147 display: flex;
148 align-items: center;
149 gap: 5px;
150 flex: none;
151 padding: 0 8px;
152 }
153
154 #everest-forms-panel-style .uxbtn {
155 width: 28px;
156 height: 28px;
157 display: grid;
158 place-items: center;
159 border: 0;
160 background: none;
161 border-radius: var(--ui-radius-sm);
162 color: var(--ui-ink-3);
163 cursor: pointer;
164 flex: none;
165 transition: background .12s, color .12s;
166
167 svg {
168 width: 15px;
169 height: 15px;
170 }
171
172 &:hover:not(:disabled) {
173 background: var(--ui-bg-hover);
174 color: var(--ui-ink);
175 }
176
177 &:disabled {
178 opacity: .35;
179 cursor: default;
180 }
181 }
182
183 /* Undo/redo/Reset share one quiet, right-aligned row above "Pre-defined" — all three are the
184 same plain ghost .uxbtn (icon only, no label), so Reset reads as one more history-style
185 control rather than a visually mismatched text link. A thin divider marks it as the odd one
186 out (it clears palette/template/custom CSS too — not just Elements, which is why it no longer
187 sits next to that heading), without giving it a different button shape. */
188 #everest-forms-panel-style .uxrow {
189 display: flex;
190 align-items: center;
191 justify-content: flex-end;
192 gap: 4px;
193 padding-bottom: 10px;
194 border-bottom: 1px solid var(--ui-line-2);
195
196 + .block-title {
197 margin-top: 14px;
198 }
199 }
200
201 #everest-forms-panel-style .uxrow-history {
202 display: flex;
203 align-items: center;
204 gap: 4px;
205 }
206
207 #everest-forms-panel-style .uxrow-divider {
208 width: 1px;
209 height: 16px;
210 background: var(--ui-line);
211 margin: 0 2px;
212 flex: none;
213 }
214
215 #everest-forms-panel-style .subtab {
216 flex: 1;
217 display: block;
218 text-align: center;
219 padding: 12px 4px 16px;
220 font-size: var(--ui-fs-base);
221 line-height: 150%;
222 font-weight: 500;
223 color: var(--ui-ink-2);
224 background: var(--ui-bg-subtle);
225 border: 0;
226 border-top: 3px solid transparent;
227 cursor: pointer;
228 transition: all .3s ease-in-out;
229
230 &:hover {
231 color: var(--ui-purple);
232 }
233
234 &[aria-selected="true"]="true""] {
235 background: #fff;
236 color: var(--ui-purple);
237 border-top-color: var(--ui-purple);
238 }
239 }
240
241 /* drill-down back header — chevron + title, plus room for a trailing action (e.g. the Elements
242 section's reset button) in the same row; the same shape for every drill-down (Elements
243 sections and Templates/Colors/CSS alike) so none of them read as a different pattern. */
244 #everest-forms-panel-style .navback {
245 display: flex;
246 align-items: center;
247 justify-content: space-between;
248 gap: 8px;
249 padding: 6px 10px;
250 border-bottom: 1px solid var(--ui-line-2);
251 flex: none;
252 }
253
254 /* flex: none, not 1 — the button should only be as wide as its own text, so its hover/click
255 area doesn't swallow the rest of the row (where the reset button now also lives). */
256 #everest-forms-panel-style .navback .bk {
257 display: flex;
258 align-items: center;
259 gap: 9px;
260 border: 0;
261 background: none;
262 cursor: pointer;
263 color: var(--ui-ink);
264 font-weight: 600;
265 font-size: 13.5px;
266 padding: 7px 8px;
267 border-radius: 8px;
268 flex: none;
269 min-width: 0;
270 transition: background .15s ease;
271
272 &:hover {
273 background: var(--ui-purple-50);
274 }
275
276 &:focus-visible {
277 outline: none;
278 box-shadow: var(--ui-focus);
279 }
280
281 > svg {
282 width: 17px;
283 height: 17px;
284 color: var(--ui-purple);
285 flex: none;
286 }
287 }
288
289 /* responsive context strip */
290 #everest-forms-panel-style .ctxbar {
291 margin: 12px 16px 0;
292 display: flex;
293 align-items: center;
294 gap: 8px;
295 background: var(--ui-purple-50);
296 border: 1px solid var(--ui-purple-100);
297 border-radius: var(--ui-radius-md);
298 padding: 7px 10px;
299 font-size: 11.5px;
300 color: var(--ui-ink-2);
301
302 b {
303 color: var(--ui-purple);
304 }
305
306 button.back {
307 margin-left: auto;
308 border: 1px solid var(--ui-input-border);
309 background: #fff;
310 border-radius: var(--ui-radius-sm);
311 padding: 4px 9px;
312 font-size: 11px;
313 font-weight: 600;
314 color: var(--ui-ink-2);
315 cursor: pointer;
316 white-space: nowrap;
317 transition: color .12s, border-color .12s;
318
319 &:hover {
320 color: var(--ui-purple);
321 border-color: var(--ui-purple);
322 }
323
324 &:focus-visible {
325 outline: none;
326 box-shadow: var(--ui-focus);
327 }
328 }
329 }
330
331 /* "Editing a template" mode card — persists across every sub-tab. Internals (name field,
332 error, action buttons) deliberately reuse the exact .pal-* classes the colour-palette editor
333 already uses, so the two "edit a saved preset" flows look and behave the same way. */
334 #everest-forms-panel-style .tpl-editbar {
335 margin: 12px 16px 0;
336 padding: 12px;
337 background: var(--ui-purple-50);
338 border: 1px solid var(--ui-purple-100);
339 border-radius: var(--ui-radius-md);
340
341 .tpl-editbar-title {
342 font-size: 12.5px;
343 font-weight: 600;
344 color: var(--ui-ink);
345 margin-bottom: 4px;
346 overflow: hidden;
347 text-overflow: ellipsis;
348 white-space: nowrap;
349 }
350
351 .tpl-editbar-sub {
352 font-size: 12px;
353 line-height: 1.45;
354 color: var(--ui-ink-2);
355 margin: 0 0 10px;
356 }
357
358 .pal-name-field {
359 margin: 0 0 10px;
360 }
361
362 .pal-editor-actions {
363 margin: 10px 0 0;
364 padding-top: 10px;
365 }
366 }
367
368 #everest-forms-panel-style .panel-scroll {
369 overflow-y: auto;
370 padding: 16px 16px 16px;
371 flex: 1;
372 min-height: 0;
373 background: #fff;
374 }
375
376 /* Directional motion for list ↔ slate drill-down and sub-tab switching; transform/opacity only. */
377 #everest-forms-panel-style .slate-anim {
378 animation: scv2slatein .16s ease-out;
379 }
380
381 @keyframes scv2slatein {
382 from {
383 opacity: 0;
384 transform: translateX(10px);
385 }
386 to {
387 opacity: 1;
388 transform: translateX(0);
389 }
390 }
391
392 /* design list — one consistent look for every section heading ("Pre-defined", "Elements",
393 "Advanced", "Presets", "Your Template"/"Your Palette" inside their own browse screens, …),
394 so drilling from one into another never feels like a typographic step down or up. */
395 #everest-forms-panel-style .block-title {
396 font-size: var(--ui-fs-xs);
397 font-weight: 600;
398 letter-spacing: .04em;
399 text-transform: uppercase;
400 color: var(--ui-ink-3);
401 margin: 18px 2px 8px;
402
403 &:first-child {
404 margin-top: 2px;
405 }
406 }
407
408 /* "Your Template" / "Your Palette" browse screens: just spacing — the live current-state card
409 inside (.pal-card--summary / .tpl-static) carries its own purple-bordered "currently active"
410 look, matching the selected-preset treatment used everywhere else in the panel. Extra room
411 below (24px, matching .block-title's own 18px-top rhythm plus a bit more since a bordered
412 card needs more visual separation than plain text does) before "Presets" starts. */
413 #everest-forms-panel-style .current-block {
414 margin-bottom: 24px;
415
416 .block-title {
417 margin-bottom: 12px;
418 }
419
420 .tpls,
421 .pal-card--wrap {
422 margin-bottom: 0;
423 }
424 }
425
426 /* "Pre-defined" summary cards (Your Template / Your Palette) — each a compact row with a
427 Browse action into its own drill-down pane. */
428 #everest-forms-panel-style .predefined-row {
429 display: flex;
430 flex-direction: column;
431 gap: 12px;
432 margin-bottom: 8px;
433 }
434
435 /* Same "selectable row" language as .elrow (border+bg on hover) — these are full-width buttons,
436 not static cards, so the whole row (not just "Browse") opens its drill-down. */
437 #everest-forms-panel-style .predef-card {
438 display: flex;
439 align-items: center;
440 gap: 14px;
441 width: 100%;
442 border: 1px solid var(--ui-line);
443 border-radius: var(--ui-radius-md);
444 padding: 12px;
445 background: #fff;
446 cursor: pointer;
447 text-align: left;
448 transition: border-color .12s, background .12s;
449
450 &:hover {
451 border-color: var(--ui-purple);
452 background: var(--ui-purple-50);
453 }
454
455 &:focus-visible {
456 outline: none;
457 box-shadow: var(--ui-focus-soft);
458 }
459 }
460
461 #everest-forms-panel-style .predef-thumb {
462 width: 40px;
463 height: 40px;
464 flex: none;
465 border-radius: var(--ui-radius-sm);
466 overflow: hidden;
467 border: 1px solid var(--ui-line-2);
468
469 .thumb {
470 height: 100%;
471 padding: 5px;
472 display: flex;
473 flex-direction: column;
474 gap: 3px;
475 justify-content: center;
476 }
477
478 .thumb .l {
479 height: 3px;
480 width: 46%;
481 border-radius: 2px;
482 flex: none;
483 }
484
485 .thumb .l2 {
486 width: 30%;
487 }
488
489 .thumb .f {
490 height: 6px;
491 border: 1px solid;
492 border-radius: 2px;
493 flex: none;
494 }
495
496 .thumb .b {
497 height: 5px;
498 width: 42%;
499 border-radius: 2px;
500 flex: none;
501 margin-top: 1px;
502 }
503
504 .thumb.thumb-has-img {
505 height: 100%;
506 padding: 2px;
507 }
508 }
509
510 /* A row of small colour dots (not a boxed grid) — same "just the swatches" language the
511 Presets grid below uses for each preset's own 6 colours. */
512 #everest-forms-panel-style .predef-swatch {
513 flex: none;
514 display: flex;
515 gap: 4px;
516
517 i {
518 display: block;
519 width: 16px;
520 height: 16px;
521 border-radius: 50%;
522 flex: none;
523 box-shadow: inset 0 0 0 1px rgba(20, 23, 40, .08);
524 }
525 }
526
527 #everest-forms-panel-style .predef-body {
528 flex: 1;
529 min-width: 0;
530 display: flex;
531 flex-direction: column;
532 gap: 2px;
533 }
534
535 #everest-forms-panel-style .predef-kicker {
536 font-size: 10px;
537 font-weight: 500;
538 letter-spacing: .04em;
539 text-transform: uppercase;
540 color: var(--ui-ink-3);
541 }
542
543 #everest-forms-panel-style .predef-name {
544 font-size: 12.5px;
545 font-weight: 600;
546 color: var(--ui-ink);
547 display: flex;
548 align-items: center;
549 gap: 6px;
550 overflow: hidden;
551 text-overflow: ellipsis;
552 white-space: nowrap;
553 }
554
555 #everest-forms-panel-style .predef-badge {
556 flex: none;
557 font-size: 8px;
558 font-weight: 700;
559 text-transform: uppercase;
560 letter-spacing: 0.8px;
561 color: #92620a;
562 background: #fef3c7;
563 border-radius: 999px;
564 padding: 3px 6px;
565 border: 1px solid #f7d491;
566 }
567
568 /* Neutral counterpart to the amber "Modified" pill: the current style exactly matches this
569 preset, unedited. */
570 /* Same pill shape as the amber "Modified" badge above — only the shade changes. */
571 #everest-forms-panel-style .predef-badge--base {
572 color: var(--ui-ink-3);
573 background: var(--ui-bg-subtle);
574 border-color: var(--ui-line);
575 }
576
577 /* Tags a preset carried over from the retired "create your own" feature — sorts first in the
578 grid, distinguished from the amber "Modified"/neutral "Base" pills by the accent hue. */
579 #everest-forms-panel-style .predef-badge--custom {
580 color: var(--ui-purple);
581 background: var(--ui-purple-50);
582 border-color: var(--ui-purple-100);
583 }
584
585
586 /* Non-interactive "Your Template" card in the Templates browse screen — same shell as .tpl,
587 just not clickable, always shown with the same purple ring a selected preset gets elsewhere
588 in the panel (it IS the currently active one, permanently). */
589 #everest-forms-panel-style .tpl.tpl-static {
590 cursor: default;
591
592 .tpl-thumb-box,
593 &:hover .tpl-thumb-box {
594 border-color: var(--ui-purple);
595 }
596 }
597
598 #everest-forms-panel-style .hintline {
599 display: flex;
600 align-items: flex-start;
601 gap: 7px;
602 font-size: var(--ui-fs-xs);
603 color: var(--ui-ink-3);
604 line-height: 1.5;
605 margin: 12px 2px 10px;
606
607 svg {
608 width: 14px;
609 height: 14px;
610 flex: none;
611 margin-top: 1px;
612 color: var(--ui-purple);
613 }
614
615 b {
616 color: var(--ui-purple);
617 font-weight: 600;
618 }
619 }
620
621 /* Secondary form-wide setting, pinned to the bottom of the Design list. */
622 #everest-forms-panel-style .theme-style-row {
623 display: flex;
624 align-items: center;
625 gap: 12px;
626 width: 100%;
627 margin-top: 18px;
628 padding: 14px 2px;
629 border-top: 1px solid var(--ui-line-2);
630 border-bottom: 1px solid var(--ui-line-2);
631
632 .tsr-text {
633 display: flex;
634 min-width: 0;
635 flex: 1;
636
637 b {
638 display: flex;
639 align-items: center;
640 gap: 4px;
641 font-size: 12.5px;
642 font-weight: 600;
643 color: var(--ui-ink-2);
644
645 /* Same "(i)" glyph as the Live Preview header, sized down for this inline context. */
646 .info {
647 border: 0;
648 background: none;
649 color: var(--ui-icon);
650 cursor: pointer;
651 display: grid;
652 place-items: center;
653 width: 16px;
654 height: 16px;
655 padding: 0;
656 border-radius: 50%;
657 flex: none;
658
659 svg {
660 width: 13px;
661 height: 13px;
662 }
663 }
664 }
665 }
666 }
667
668 /* Custom dropdown language shared by every select in the panel (plain select + font combobox). */
669 #everest-forms-panel-style .dsel {
670 position: relative;
671 width: 100%;
672 }
673
674 #everest-forms-panel-style .dsel-trigger {
675 display: flex;
676 align-items: center;
677 justify-content: space-between;
678 gap: 8px;
679 width: 100%;
680 height: var(--ui-ctrl-h);
681 border: 1px solid var(--ui-input-border);
682 border-radius: var(--ui-radius-md);
683 background: #fff;
684 padding: 0 10px;
685 cursor: pointer;
686 text-align: left;
687 font-size: 12.5px;
688 color: var(--ui-ink);
689 outline: none;
690 transition: border-color .12s, box-shadow .12s;
691
692 &:hover:not(:disabled) {
693 border-color: #b9bdc9;
694 }
695
696 &:focus,
697 &[aria-expanded="true"]="true""] {
698 outline: none;
699 border-color: var(--ui-purple);
700 box-shadow: var(--ui-focus-soft);
701 }
702
703 &:disabled {
704 opacity: .55;
705 cursor: not-allowed;
706 }
707
708 .dsel-val {
709 overflow: hidden;
710 text-overflow: ellipsis;
711 white-space: nowrap;
712 }
713
714 .dsel-chev {
715 display: grid;
716 place-items: center;
717 color: var(--ui-ink-3);
718 flex: none;
719
720 svg {
721 width: 15px;
722 height: 15px;
723 }
724 }
725 }
726
727 #everest-forms-panel-style .dsel-pop {
728 position: absolute;
729 z-index: 30;
730 top: calc(100% + 4px);
731 left: 0;
732 right: 0;
733 background: #fff;
734 border: 1px solid var(--ui-line);
735 border-radius: var(--ui-radius-md);
736 box-shadow: var(--ui-shadow);
737 overflow: hidden;
738 transform-origin: top center;
739 animation: scv2popin .12s ease-out;
740 }
741
742 #everest-forms-panel-style .dsel-search-wrap {
743 position: relative;
744 border-bottom: 1px solid var(--ui-line-2);
745 transition: border-color .12s;
746
747 &:focus-within {
748 border-bottom-color: var(--ui-purple);
749 }
750 }
751
752 #everest-forms-panel-style .dsel-search-ic {
753 position: absolute;
754 left: 11px;
755 top: 50%;
756 transform: translateY(-50%);
757 width: 14px;
758 height: 14px;
759 color: var(--ui-ink-3);
760 pointer-events: none;
761 }
762
763 #everest-forms-panel-style .dsel-search {
764 width: 100%;
765 display: block;
766 border: 0;
767 padding: 9px 11px 9px 32px;
768 font-size: 12.5px;
769 color: var(--ui-ink);
770 background: none;
771 outline: none;
772 box-shadow: none;
773
774 &:focus {
775 outline: none;
776 box-shadow: none;
777 }
778 }
779
780 #everest-forms-panel-style .dsel-list {
781 max-height: 240px;
782 overflow-y: auto;
783 padding: 4px;
784 }
785
786 #everest-forms-panel-style .dsel-opt {
787 display: flex;
788 align-items: center;
789 gap: 8px;
790 width: 100%;
791 text-align: left;
792 border: 0;
793 background: none;
794 padding: 7px 9px;
795 font-size: 12.5px;
796 color: var(--ui-ink-2);
797 border-radius: var(--ui-radius-sm);
798 cursor: pointer;
799
800 &:hover,
801 &.active {
802 background: var(--ui-purple-50);
803 }
804
805 &.sel {
806 color: var(--ui-purple);
807 font-weight: 600;
808 }
809
810 .dsel-check {
811 display: grid;
812 place-items: center;
813 width: 15px;
814 height: 15px;
815 flex: none;
816 color: var(--ui-purple);
817
818 svg {
819 width: 13px;
820 height: 13px;
821 }
822 }
823 }
824
825 #everest-forms-panel-style .dsel-empty {
826 padding: 14px 10px;
827 font-size: 12px;
828 color: var(--ui-ink-3);
829 text-align: center;
830 }
831
832 #everest-forms-panel-style .pal-select {
833 display: flex;
834 align-items: center;
835 gap: 10px;
836 width: 100%;
837 border: 1px solid var(--ui-input-border);
838 border-radius: var(--ui-radius-sm);
839 background: #fff;
840 padding: 8px 12px;
841 cursor: pointer;
842 text-align: left;
843 transition: border-color .12s, box-shadow .12s;
844
845 &:hover {
846 border-color: #b9bdc9;
847 }
848
849 &[aria-expanded="true"]="true""] {
850 border-color: var(--ui-purple);
851 box-shadow: var(--ui-focus-soft);
852 }
853
854 .sw {
855 display: flex;
856 gap: 4px;
857 flex: none;
858 }
859
860 .sw i {
861 width: 16px;
862 height: 16px;
863 border-radius: 50%;
864 flex: none;
865 box-shadow: inset 0 0 0 1px rgba(20, 23, 40, .08);
866 }
867
868 .nm {
869 flex: 1;
870 font-size: 12.5px;
871 font-weight: 600;
872 color: var(--ui-ink);
873 white-space: nowrap;
874 overflow: hidden;
875 text-overflow: ellipsis;
876 }
877
878 .nm::before {
879 content: "PALETTE";
880 display: block;
881 font-size: 9.5px;
882 font-weight: 600;
883 color: var(--ui-ink-3);
884 letter-spacing: .08em;
885 margin-bottom: 1px;
886 }
887
888 .chev {
889 width: 24px;
890 height: 24px;
891 border-radius: var(--ui-radius-sm);
892 background: var(--ui-bg-subtle);
893 color: var(--ui-ink-3);
894 display: grid;
895 place-items: center;
896 transition: background .15s, color .15s, transform .15s;
897 flex: none;
898 font-size: 13px;
899
900 svg {
901 width: 13px;
902 height: 13px;
903 }
904 }
905
906 &[aria-expanded="true"]="true""] .chev {
907 background: var(--ui-purple-50);
908 color: var(--ui-purple);
909 }
910
911 &[aria-expanded="true"]="true""] .chev:not(.as-close) {
912 transform: rotate(180deg);
913 }
914
915 .chev.as-close:hover {
916 background: var(--ui-purple);
917 color: #fff;
918 }
919 }
920
921 #everest-forms-panel-style .ellist {
922 display: flex;
923 flex-direction: column;
924 gap: 12px;
925 }
926
927 #everest-forms-panel-style .elrow {
928 display: flex;
929 align-items: center;
930 gap: 11px;
931 width: 100%;
932 border: 1px solid var(--ui-line);
933 border-radius: var(--ui-radius-md);
934 background: #fff;
935 padding: 11px 12px;
936 cursor: pointer;
937 text-align: left;
938 transition: border-color .12s, background .12s;
939
940 &:hover {
941 border-color: var(--ui-purple);
942 background: var(--ui-purple-50);
943 }
944
945 .ic {
946 width: 28px;
947 height: 28px;
948 border-radius: var(--ui-radius-sm);
949 background: var(--ui-purple-50);
950 color: var(--ui-purple);
951 display: grid;
952 place-items: center;
953 flex: none;
954 }
955
956 .ic svg {
957 width: 16px;
958 height: 16px;
959 }
960
961 .tx {
962 flex: 1;
963 min-width: 0;
964 display: flex;
965 flex-direction: column;
966 gap: 1px;
967 }
968
969 .tx b {
970 font-size: 12.5px;
971 font-weight: 600;
972 color: var(--ui-ink);
973 }
974
975 .tx small {
976 color: var(--ui-ink-3);
977 font-size: 11px;
978 }
979
980 .dot {
981 width: 7px;
982 height: 7px;
983 border-radius: 50%;
984 background: var(--ui-purple);
985 opacity: 0;
986 flex: none;
987 }
988
989 &.dirty .dot {
990 opacity: 1;
991 }
992
993 .chev {
994 color: var(--ui-icon);
995 flex: none;
996 display: grid;
997 place-items: center;
998
999 svg {
1000 width: 16px;
1001 height: 16px;
1002 }
1003 }
1004 }
1005
1006 /* state / variant tabs */
1007 #everest-forms-panel-style .state-seg {
1008 display: flex;
1009 gap: 4px;
1010 margin: 4px 0 16px;
1011 background: var(--ui-bg-subtle);
1012 padding: 3px;
1013 border-radius: 8px;
1014
1015 button {
1016 flex: 1;
1017 border: 0;
1018 background: none;
1019 padding: 6px 2px;
1020 border-radius: var(--ui-radius-md);
1021 font-size: 11px;
1022 font-weight: 600;
1023 color: var(--ui-ink-2);
1024 cursor: pointer;
1025 transition: background .12s, color .12s, box-shadow .12s;
1026
1027 &[aria-selected="true"]="true""] {
1028 background: #fff;
1029 color: var(--ui-purple);
1030 box-shadow: var(--ui-shadow-sm);
1031 }
1032 }
1033 }
1034
1035 /* Dep-dimmed / pro-locked controls (e.g. border width when the border style is None). */
1036 #everest-forms-panel-style .ctrl.shared-dim {
1037 opacity: .55;
1038 pointer-events: none;
1039 }
1040
1041
1042 /* Empty state (e.g. zero saved templates yet) — a quiet dashed placeholder. */
1043 #everest-forms-panel-style .empty-state {
1044 display: flex;
1045 flex-direction: column;
1046 align-items: center;
1047 text-align: center;
1048 gap: 6px;
1049 padding: 22px 16px;
1050 border: 1px dashed var(--ui-line);
1051 border-radius: var(--ui-radius-lg);
1052 color: var(--ui-ink-3);
1053 font-size: var(--ui-fs-sm);
1054 margin-bottom: 16px;
1055
1056 svg {
1057 width: 20px;
1058 height: 20px;
1059 color: var(--ui-icon);
1060 margin-bottom: 2px;
1061 }
1062 }
1063
1064 /* grouped cards — a quiet, flat surface used consistently across every section. */
1065 #everest-forms-panel-style .grp {
1066 margin-bottom: 14px;
1067
1068 &:first-child {
1069 margin-top: 0;
1070 }
1071
1072 &:last-child {
1073 margin-bottom: 0;
1074 }
1075 }
1076
1077 #everest-forms-panel-style #elBody .grp {
1078 background: #fff;
1079 border: 1px solid var(--ui-line);
1080 border-radius: var(--ui-radius-md);
1081 padding: 16px;
1082 box-shadow: var(--ui-shadow-sm);
1083 }
1084
1085 #everest-forms-panel-style .grp-h {
1086 font-size: 10.5px;
1087 font-weight: 600;
1088 color: var(--ui-ink-3);
1089 letter-spacing: .06em;
1090 text-transform: uppercase;
1091 margin: 1px 0 14px;
1092 }
1093
1094 #everest-forms-panel-style #elBody .grp .ctrl:last-child {
1095 margin-bottom: 0;
1096 }
1097
1098 /* controls */
1099 #everest-forms-panel-style .ctrl {
1100 margin-bottom: 16px;
1101 border-radius: var(--ui-radius-md);
1102 position: relative;
1103 }
1104
1105 /* Opening a slate by clicking an element in the live preview: a soft, quick background wash. */
1106 #everest-forms-panel-style #elBody.flash {
1107 animation: scv2slateflash .6s ease-out;
1108 }
1109
1110 @keyframes scv2slateflash {
1111 0% {
1112 background: var(--ui-purple-50);
1113 }
1114 100% {
1115 background: transparent;
1116 }
1117 }
1118
1119 #everest-forms-panel-style .ctrl-lab {
1120 display: flex;
1121 align-items: center;
1122 justify-content: space-between;
1123 margin-bottom: 6px;
1124 gap: 8px;
1125 }
1126
1127 #everest-forms-panel-style .lab-left {
1128 display: flex;
1129 align-items: center;
1130 gap: 6px;
1131 min-width: 0;
1132 }
1133
1134 #everest-forms-panel-style .ctrl-lab label {
1135 font-size: 12px;
1136 font-weight: 500;
1137 color: var(--ui-ink-2);
1138 }
1139
1140 #everest-forms-panel-style .ctrl-lab .lab-right {
1141 display: flex;
1142 align-items: center;
1143 gap: 4px;
1144 }
1145
1146 #everest-forms-panel-style .ctrl.inherited .ctrl-lab label {
1147 color: var(--ui-ink-3);
1148 }
1149
1150 #everest-forms-panel-style .ctrl.inherited .ctrl-lab label::after {
1151 content: " · inherited";
1152 font-style: italic;
1153 font-weight: 400;
1154 }
1155
1156 #everest-forms-panel-style .px-hint {
1157 font-size: 10px;
1158 color: var(--ui-ink-3);
1159 border: 1px solid var(--ui-line);
1160 border-radius: var(--ui-radius-sm);
1161 padding: 1px 5px;
1162 background: var(--ui-bg-subtle);
1163 }
1164
1165 #everest-forms-panel-style .prop-reset {
1166 width: 24px;
1167 height: 24px;
1168 border: 0;
1169 background: none;
1170 border-radius: var(--ui-radius-md);
1171 color: var(--ui-icon);
1172 cursor: pointer;
1173 display: none;
1174 place-items: center;
1175 flex: none;
1176 transition: background .12s, color .12s;
1177
1178 svg {
1179 width: 13px;
1180 height: 13px;
1181 }
1182
1183 &:hover {
1184 background: var(--ui-line-2);
1185 color: var(--ui-ink-2);
1186 }
1187 }
1188
1189 #everest-forms-panel-style .ctrl.changed .prop-reset {
1190 display: grid;
1191 }
1192
1193 #everest-forms-panel-style .dev-badge {
1194 width: 26px;
1195 height: 24px;
1196 border: 1px solid var(--ui-line);
1197 border-radius: var(--ui-radius-md);
1198 background: #fff;
1199 display: grid;
1200 place-items: center;
1201 cursor: pointer;
1202 color: var(--ui-icon);
1203 position: relative;
1204 padding: 0;
1205 flex: none;
1206 transition: border-color .12s;
1207
1208 svg {
1209 width: 13px;
1210 height: 13px;
1211 pointer-events: none;
1212 }
1213
1214 &:hover {
1215 border-color: #b9bdc9;
1216 }
1217
1218 &.override {
1219 border-color: var(--ui-purple);
1220 color: var(--ui-purple);
1221 background: var(--ui-purple-50);
1222 }
1223
1224 &.override::after {
1225 content: "";
1226 position: absolute;
1227 top: -4px;
1228 right: -4px;
1229 width: 8px;
1230 height: 8px;
1231 border-radius: 50%;
1232 background: var(--ui-purple);
1233 border: 1.5px solid #fff;
1234 }
1235 }
1236
1237 #everest-forms-panel-style .slider {
1238 display: flex;
1239 align-items: center;
1240 gap: 12px;
1241
1242 .slider-track {
1243 position: relative;
1244 flex: 1;
1245 min-width: 0;
1246 }
1247
1248 /* Value bubble that follows the thumb — shown on hover, drag, and keyboard focus. */
1249 .slider-tip {
1250 position: absolute;
1251 bottom: calc(100% + 8px);
1252 background: #1f2433;
1253 color: #fff;
1254 font-size: 11px;
1255 font-weight: 600;
1256 line-height: 1;
1257 padding: 4px 7px;
1258 border-radius: var(--ui-radius-sm);
1259 white-space: nowrap;
1260 pointer-events: none;
1261 opacity: 0;
1262 transform: translateX(-50%) translateY(2px);
1263 transition: opacity .12s ease, transform .12s ease;
1264 font-variant-numeric: tabular-nums;
1265 z-index: 2;
1266
1267 &::after {
1268 content: "";
1269 position: absolute;
1270 top: 100%;
1271 left: 50%;
1272 transform: translateX(-50%);
1273 border: 4px solid transparent;
1274 border-top-color: #1f2433;
1275 }
1276 }
1277
1278 input[type="range"]="range""] {
1279 -webkit-appearance: none;
1280 appearance: none;
1281 width: 100%;
1282 display: block;
1283 min-width: 0;
1284 height: 15px;
1285 background: transparent;
1286 cursor: pointer;
1287 margin: 0;
1288
1289 &:hover ~ .slider-tip,
1290 &:active ~ .slider-tip,
1291 &:focus-visible ~ .slider-tip {
1292 opacity: 1;
1293 transform: translateX(-50%) translateY(0);
1294 }
1295
1296 /* Filled track — `--fill` is set inline from the resolved value (see ControlRenderer.tsx). */
1297 &::-webkit-slider-runnable-track {
1298 height: 4px;
1299 border-radius: 99px;
1300 background: linear-gradient(to right, var(--ui-purple) var(--fill, 0%), var(--ui-line-2) var(--fill, 0%));
1301 transition: filter .12s ease;
1302 }
1303
1304 /* Firefox exposes the filled portion as its own pseudo-element — no gradient trick needed. */
1305 &::-moz-range-track {
1306 height: 4px;
1307 border-radius: 99px;
1308 background: var(--ui-line-2);
1309 }
1310
1311 &::-moz-range-progress {
1312 height: 4px;
1313 border-radius: 99px;
1314 background: var(--ui-purple);
1315 transition: filter .12s ease;
1316 }
1317
1318 &:hover::-webkit-slider-runnable-track,
1319 &:hover::-moz-range-progress {
1320 filter: brightness(.88);
1321 }
1322
1323 /* A clean white disc with a purple ring — modern, legible at a glance, no native chrome. */
1324 &::-webkit-slider-thumb {
1325 -webkit-appearance: none;
1326 width: 15px;
1327 height: 15px;
1328 border-radius: 50%;
1329 background: #fff;
1330 border: 2px solid var(--ui-purple);
1331 margin-top: -6px;
1332 box-shadow: 0 1px 2px rgba(20, 23, 40, .12);
1333 transition: box-shadow .12s ease, transform .12s ease;
1334 }
1335
1336 &::-moz-range-thumb {
1337 width: 13px;
1338 height: 13px;
1339 border-radius: 50%;
1340 background: #fff;
1341 border: 2px solid var(--ui-purple);
1342 box-shadow: 0 1px 2px rgba(20, 23, 40, .12);
1343 }
1344
1345 &:hover::-webkit-slider-thumb,
1346 &:hover::-moz-range-thumb {
1347 transform: scale(1.1);
1348 }
1349
1350 &:focus-visible {
1351 outline: none;
1352 }
1353
1354 &:focus-visible::-webkit-slider-thumb {
1355 box-shadow: 0 0 0 4px var(--ui-purple-50);
1356 }
1357
1358 &:focus-visible::-moz-range-thumb {
1359 box-shadow: 0 0 0 4px var(--ui-purple-50);
1360 }
1361 }
1362
1363 /* Safety net: reveal the value bubble on hovering anywhere in the slider row. */
1364 &:hover .slider-tip {
1365 opacity: 1;
1366 transform: translateX(-50%) translateY(0);
1367 }
1368 }
1369
1370 #everest-forms-panel-style .num {
1371 width: 62px;
1372 height: var(--ui-ctrl-h);
1373 display: flex;
1374 border: 1px solid var(--ui-input-border);
1375 border-radius: var(--ui-radius-md);
1376 overflow: hidden;
1377 flex: none;
1378 transition: border-color .12s, box-shadow .12s;
1379
1380 &:focus-within {
1381 border-color: var(--ui-purple);
1382 box-shadow: var(--ui-focus-soft);
1383 }
1384
1385 input {
1386 width: 100%;
1387 border: 0;
1388 padding: 0 4px;
1389 font-size: 12px;
1390 text-align: center;
1391 color: var(--ui-ink);
1392 font-variant-numeric: tabular-nums;
1393 background: none;
1394 outline: none;
1395 box-shadow: none;
1396
1397 &:focus {
1398 outline: none;
1399 box-shadow: none;
1400 }
1401 }
1402
1403 span {
1404 background: var(--ui-bg-subtle);
1405 border-left: 1px solid var(--ui-line);
1406 padding: 0 5px;
1407 color: var(--ui-ink-3);
1408 font-size: 10px;
1409 display: grid;
1410 place-items: center;
1411 }
1412 }
1413
1414 #everest-forms-panel-style .color {
1415 position: relative;
1416 display: flex;
1417 align-items: center;
1418 gap: 8px;
1419 height: var(--ui-ctrl-h);
1420 border: 1px solid var(--ui-input-border);
1421 border-radius: var(--ui-radius-md);
1422 padding: 0 8px;
1423 transition: border-color .12s, box-shadow .12s;
1424
1425 /* The hex text field has no border of its own, so the whole box shows the focus ring. */
1426 &:focus-within {
1427 border-color: var(--ui-purple);
1428 box-shadow: var(--ui-focus-soft);
1429 }
1430
1431 .swatch {
1432 width: 22px;
1433 height: 22px;
1434 flex: none;
1435 padding: 0;
1436 border: 1px solid rgba(0, 0, 0, .1);
1437 border-radius: var(--ui-radius-sm);
1438 cursor: pointer;
1439 background-image:
1440 linear-gradient(var(--swatch), var(--swatch)),
1441 repeating-conic-gradient(#ccc 0 25%, #fff 0 50%);
1442 background-size: 100% 100%, 8px 8px;
1443 }
1444
1445 .hex {
1446 flex: 1;
1447 border: 0;
1448 font-size: 12px;
1449 font-family: ui-monospace, monospace;
1450 color: var(--ui-ink);
1451 min-width: 0;
1452 background: none;
1453 outline: none;
1454 box-shadow: none;
1455
1456 &:focus {
1457 outline: none;
1458 box-shadow: none;
1459 }
1460 }
1461
1462 .hex-grad-label {
1463 font-family: inherit;
1464 font-style: italic;
1465 color: var(--ui-ink-3);
1466 }
1467
1468 .err {
1469 font-size: 10.5px;
1470 color: var(--ui-red);
1471 white-space: nowrap;
1472 }
1473
1474 &.invalid {
1475 border-color: var(--ui-red);
1476 }
1477 }
1478
1479 /* position:fixed + a React-computed left/top (see ColorPickerField) — portaled to the panel
1480 root (same target HoverTip uses), so it can never be clipped by a scrolling ancestor (the
1481 panel sidebar, a palette's row list, etc). Gradient mode's content (bar + full colour editor +
1482 angle row) runs taller than solid's — max-height + its own scroll means that never pushes the
1483 popover off the top of a short viewport instead of the content just getting cut off. */
1484 #everest-forms-panel-style .color-pop {
1485 position: fixed;
1486 z-index: 999999;
1487 width: 264px;
1488 max-height: calc(100vh - 16px);
1489 overflow-y: auto;
1490 background: #fff;
1491 border: 1px solid var(--ui-line);
1492 border-radius: var(--ui-radius-lg);
1493 box-shadow: var(--ui-shadow-lg);
1494 padding: 14px;
1495
1496 .react-colorful {
1497 width: 100%;
1498 height: 180px;
1499 gap: 12px;
1500 }
1501
1502 .react-colorful__saturation {
1503 border-radius: var(--ui-radius-md);
1504 box-shadow: inset 0 0 0 1px rgba(20, 23, 40, .06);
1505 margin-bottom: 12px;
1506 }
1507
1508 .react-colorful__hue,
1509 .react-colorful__alpha {
1510 height: 14px;
1511 border-radius: 99px;
1512 box-shadow: inset 0 0 0 1px rgba(20, 23, 40, .08);
1513 }
1514
1515 .react-colorful__hue {
1516 margin-bottom: 12px;
1517 }
1518
1519 .react-colorful__hue-pointer,
1520 .react-colorful__alpha-pointer,
1521 .react-colorful__saturation-pointer {
1522 width: 18px;
1523 height: 18px;
1524 box-shadow: 0 0 0 2px #fff, 0 2px 6px rgba(20, 23, 40, .3);
1525 }
1526 }
1527
1528 /* Header row: which colour this popover is editing + an optional "pick from screen" tool
1529 (Chromium's EyeDropper API — feature-detected, so the button simply doesn't render elsewhere). */
1530 #everest-forms-panel-style .color-pop-head {
1531 display: flex;
1532 align-items: center;
1533 justify-content: space-between;
1534 gap: 8px;
1535 margin-bottom: 10px;
1536
1537 span {
1538 font-size: 11px;
1539 font-weight: 600;
1540 letter-spacing: .03em;
1541 text-transform: uppercase;
1542 color: var(--ui-ink-3);
1543 overflow: hidden;
1544 text-overflow: ellipsis;
1545 white-space: nowrap;
1546 }
1547 }
1548
1549 #everest-forms-panel-style .eyedrop-btn {
1550 width: 26px;
1551 height: 26px;
1552 border: 1px solid var(--ui-input-border);
1553 background: #fff;
1554 border-radius: var(--ui-radius-sm);
1555 color: var(--ui-ink-2);
1556 cursor: pointer;
1557 display: grid;
1558 place-items: center;
1559 flex: none;
1560 transition: border-color .12s, color .12s, background .12s;
1561
1562 svg {
1563 width: 14px;
1564 height: 14px;
1565 }
1566
1567 &:hover {
1568 border-color: var(--ui-purple);
1569 color: var(--ui-purple);
1570 background: var(--ui-purple-50);
1571 }
1572 }
1573
1574 /* A quiet segmented switch — reused for both HEX/RGB/HSL (inside .cpf-toolbar, under the wheel)
1575 and, on gradient-capable tokens, Solid/Gradient (directly under the popover head, where the
1576 --mode modifier adds the one gap `.cpf-toolbar` otherwise supplies for the other usage). */
1577 #everest-forms-panel-style .cpf-format {
1578 display: flex;
1579 gap: 2px;
1580 padding: 2px;
1581 background: var(--ui-bg-subtle);
1582 border-radius: var(--ui-radius-md);
1583 }
1584
1585 #everest-forms-panel-style .cpf-format--mode {
1586 margin-bottom: 12px;
1587 }
1588
1589 #everest-forms-panel-style .cpf-format-btn {
1590 flex: 1;
1591 border: 0;
1592 background: none;
1593 padding: 4px 0;
1594 font-size: 10px;
1595 font-weight: 600;
1596 letter-spacing: .03em;
1597 color: var(--ui-ink-3);
1598 border-radius: calc(var(--ui-radius-md) - 2px);
1599 cursor: pointer;
1600 transition: background .12s, color .12s;
1601
1602 &:hover {
1603 color: var(--ui-ink-2);
1604 }
1605
1606 &.is-active {
1607 background: #fff;
1608 color: var(--ui-ink);
1609 box-shadow: var(--ui-shadow-xs, 0 1px 2px rgba(0, 0, 0, .06));
1610 }
1611 }
1612
1613 /* The row a colour field's wheel/format-switch/eyedropper share — used by both the plain solid
1614 popover and, unchanged, each gradient stop's own editor. */
1615 #everest-forms-panel-style .cpf-toolbar {
1616 display: flex;
1617 align-items: center;
1618 gap: 8px;
1619 margin-top: 12px;
1620
1621 .cpf-format {
1622 flex: 1;
1623 }
1624 }
1625
1626 /* Gradient mode — a draggable-stop bar standing in for the wheel a solid colour would otherwise
1627 show, the selected stop's full colour editor underneath, and a compass + numeric angle. No
1628 margin-top of its own: `.cpf-format--mode` above already supplies that gap, matching solid
1629 mode's spacing exactly (the wheel there sits flush under the switch too). */
1630 #everest-forms-panel-style .grad-bar {
1631 position: relative;
1632 height: 32px;
1633 border-radius: var(--ui-radius-md);
1634 border: 1px solid var(--ui-line-2);
1635 cursor: copy;
1636 }
1637
1638 #everest-forms-panel-style .grad-marker {
1639 position: absolute;
1640 top: 50%;
1641 width: 16px;
1642 height: 16px;
1643 padding: 0;
1644 border: 2px solid #fff;
1645 border-radius: 50%;
1646 background: var(--marker-color);
1647 box-shadow: 0 0 0 1px rgba(0, 0, 0, .25), 0 1px 3px rgba(0, 0, 0, .3);
1648 cursor: grab;
1649 transform: translate(-50%, -50%);
1650 transition: transform .1s;
1651
1652 &:hover {
1653 transform: translate(-50%, -50%) scale(1.15);
1654 }
1655
1656 &.is-selected {
1657 box-shadow: 0 0 0 2px var(--ui-purple), 0 1px 3px rgba(0, 0, 0, .3);
1658 z-index: 1;
1659 }
1660
1661 &:active {
1662 cursor: grabbing;
1663 }
1664 }
1665
1666 #everest-forms-panel-style .grad-hint {
1667 margin: 6px 0 0;
1668 font-size: 10.5px;
1669 color: var(--ui-ink-3);
1670 }
1671
1672 #everest-forms-panel-style .grad-stop-row {
1673 display: flex;
1674 align-items: center;
1675 justify-content: space-between;
1676 gap: 8px;
1677 margin: 12px 0;
1678 }
1679
1680 #everest-forms-panel-style .grad-stop-caption {
1681 font-size: 11px;
1682 font-weight: 600;
1683 letter-spacing: .03em;
1684 text-transform: uppercase;
1685 color: var(--ui-ink-3);
1686 font-variant-numeric: tabular-nums;
1687 }
1688
1689 #everest-forms-panel-style .grad-stop-remove {
1690 width: 22px;
1691 height: 22px;
1692 border: 1px solid var(--ui-input-border);
1693 border-radius: var(--ui-radius-sm);
1694 background: #fff;
1695 color: var(--ui-ink-2);
1696 cursor: pointer;
1697 display: grid;
1698 place-items: center;
1699 transition: border-color .12s, color .12s, background .12s;
1700
1701 svg {
1702 width: 12px;
1703 height: 12px;
1704 }
1705
1706 &:hover {
1707 border-color: var(--ui-red);
1708 color: var(--ui-red);
1709 }
1710 }
1711
1712 #everest-forms-panel-style .grad-angle-row {
1713 display: flex;
1714 align-items: center;
1715 gap: 12px;
1716 margin-top: 14px;
1717 padding-top: 14px;
1718 border-top: 1px solid var(--ui-line-2);
1719
1720 .cpf-num {
1721 flex: 1;
1722 }
1723 }
1724
1725 /* A 3x3 compass — 8 one-click preset directions around an empty centre, each arrow icon rotated
1726 to point the way that angle's gradient actually runs. */
1727 #everest-forms-panel-style .grad-compass {
1728 display: grid;
1729 grid-template-columns: repeat(3, 26px);
1730 grid-template-rows: repeat(3, 26px);
1731 gap: 3px;
1732 flex: none;
1733 }
1734
1735 #everest-forms-panel-style .grad-compass-btn {
1736 width: 26px;
1737 height: 26px;
1738 padding: 0;
1739 border: 1px solid var(--ui-input-border);
1740 border-radius: var(--ui-radius-sm);
1741 background: var(--ui-bg-subtle);
1742 color: var(--ui-ink-2);
1743 cursor: pointer;
1744 display: grid;
1745 place-items: center;
1746 transition: border-color .12s, color .12s, background .12s;
1747
1748 svg {
1749 width: 15px;
1750 height: 15px;
1751 transform: rotate(var(--deg));
1752 }
1753
1754 &:hover {
1755 border-color: var(--ui-purple);
1756 color: var(--ui-purple);
1757 background: var(--ui-purple-50);
1758 }
1759
1760 &.is-active {
1761 border-color: var(--ui-purple);
1762 background: var(--ui-purple);
1763 color: #fff;
1764 }
1765 }
1766
1767 #everest-forms-panel-style .grad-compass-center {
1768 width: 26px;
1769 height: 26px;
1770 }
1771
1772 /* Hex/RGB/HSL + Opacity, editable right inside the popover so a colour can be fully dialed in
1773 without reaching back to the trigger row underneath it. */
1774 #everest-forms-panel-style .color-pop-fields {
1775 display: flex;
1776 gap: 8px;
1777 margin-top: 8px;
1778 padding-top: 14px;
1779 border-top: 1px solid var(--ui-line-2);
1780 }
1781
1782 #everest-forms-panel-style .cpf-hex,
1783 #everest-forms-panel-style .cpf-num,
1784 #everest-forms-panel-style .cpf-alpha {
1785 display: flex;
1786 flex-direction: column;
1787 gap: 4px;
1788 }
1789
1790 #everest-forms-panel-style .cpf-hex,
1791 #everest-forms-panel-style .cpf-num {
1792 flex: 1;
1793 min-width: 0;
1794 }
1795
1796 #everest-forms-panel-style .cpf-label {
1797 font-size: 10px;
1798 font-weight: 600;
1799 letter-spacing: .03em;
1800 text-transform: uppercase;
1801 color: var(--ui-ink-3);
1802 }
1803
1804 #everest-forms-panel-style .cpf-hex .num,
1805 #everest-forms-panel-style .cpf-num .num,
1806 #everest-forms-panel-style .cpf-alpha .num {
1807 width: 100%;
1808 height: 30px;
1809 }
1810
1811 #everest-forms-panel-style .cpf-hex .num input {
1812 font-family: ui-monospace, monospace;
1813 text-align: left;
1814 padding-left: 8px;
1815 }
1816
1817 #everest-forms-panel-style .cpf-alpha {
1818 flex: none;
1819 width: 62px;
1820 }
1821
1822 /* Quick-pick swatches — a curated, always-available set (neutrals, the panel's own accent, a
1823 few common brand/UI colours) for one-click picks without touching the wheel at all. */
1824 #everest-forms-panel-style .color-pop-swatches {
1825 display: grid;
1826 grid-template-columns: repeat(8, 1fr);
1827 gap: 6px;
1828 margin-top: 12px;
1829 padding-top: 12px;
1830 border-top: 1px solid var(--ui-line-2);
1831 }
1832
1833 #everest-forms-panel-style .cps-swatch {
1834 width: 100%;
1835 aspect-ratio: 1;
1836 border: 1px solid rgba(20, 23, 40, .1);
1837 border-radius: var(--ui-radius-sm);
1838 cursor: pointer;
1839 padding: 0;
1840 transition: transform .1s ease, box-shadow .1s ease;
1841
1842 &:hover {
1843 transform: scale(1.12);
1844 box-shadow: 0 1px 4px rgba(20, 23, 40, .25);
1845 }
1846
1847 &:focus-visible {
1848 outline: none;
1849 box-shadow: var(--ui-focus);
1850 }
1851 }
1852
1853 #everest-forms-panel-style .dep-hint {
1854 font-size: 11px;
1855 color: var(--ui-ink-3);
1856 margin-top: 5px;
1857 line-height: 1.45;
1858 }
1859
1860 #everest-forms-panel-style .dep-hint--font {
1861 margin-top: 10px;
1862 }
1863
1864 /* Inputs and their T/R/B/L labels share one flex column so the link/unit buttons align with the top. */
1865 #everest-forms-panel-style .box4 {
1866 display: flex;
1867 gap: 5px;
1868 align-items: flex-start;
1869
1870 .box4-cells {
1871 flex: 1;
1872 min-width: 0;
1873 display: flex;
1874 flex-direction: column;
1875 gap: 3px;
1876 }
1877
1878 .box4-inputs {
1879 display: flex;
1880 gap: 5px;
1881 }
1882
1883 .cell {
1884 flex: 1;
1885 min-width: 0;
1886 }
1887
1888 .cell .num {
1889 width: 100%;
1890 }
1891
1892 .box4-abbr {
1893 display: flex;
1894 gap: 5px;
1895 }
1896
1897 .box4-abbr small {
1898 flex: 1;
1899 display: block;
1900 text-align: center;
1901 color: var(--ui-ink-3);
1902 font-size: 10px;
1903 }
1904
1905 .link {
1906 width: var(--ui-ctrl-h);
1907 height: var(--ui-ctrl-h);
1908 border: 1px solid var(--ui-input-border);
1909 border-radius: var(--ui-radius-md);
1910 background: #fff;
1911 cursor: pointer;
1912 display: grid;
1913 place-items: center;
1914 color: var(--ui-icon);
1915 flex: none;
1916 transition: border-color .12s, background .12s, color .12s;
1917
1918 &[aria-pressed="true"]="true""] {
1919 border-color: var(--ui-purple);
1920 color: var(--ui-purple);
1921 background: var(--ui-purple-50);
1922 }
1923
1924 svg {
1925 width: 14px;
1926 height: 14px;
1927 }
1928 }
1929
1930 .unit-tgl {
1931 height: var(--ui-ctrl-h);
1932 min-width: 34px;
1933 border: 1px solid var(--ui-input-border);
1934 border-radius: var(--ui-radius-md);
1935 background: var(--ui-bg-subtle);
1936 cursor: pointer;
1937 color: var(--ui-ink-2);
1938 font-size: 11px;
1939 font-weight: 600;
1940 flex: none;
1941 padding: 0 8px;
1942 transition: border-color .12s, color .12s;
1943
1944 &:hover {
1945 border-color: var(--ui-purple);
1946 color: var(--ui-purple);
1947 }
1948 }
1949 }
1950
1951 #everest-forms-panel-style .fstylewrap {
1952 display: flex;
1953 flex-direction: column;
1954 gap: 6px;
1955 }
1956
1957 #everest-forms-panel-style .fweight-select {
1958 width: 100%;
1959 height: var(--ui-ctrl-h);
1960 border: 1px solid var(--ui-input-border);
1961 border-radius: var(--ui-radius-md);
1962 background: #fff;
1963 color: var(--ui-ink-2);
1964 font-size: 12px;
1965 padding: 0 8px;
1966 cursor: pointer;
1967 }
1968
1969 #everest-forms-panel-style .iconset,
1970 #everest-forms-panel-style .fstyleset {
1971 display: flex;
1972 gap: 4px;
1973
1974 button {
1975 flex: 1;
1976 height: var(--ui-ctrl-h);
1977 border: 1px solid var(--ui-input-border);
1978 background: #fff;
1979 border-radius: var(--ui-radius-md);
1980 cursor: pointer;
1981 color: var(--ui-ink-2);
1982 font-size: 12px;
1983 font-weight: 700;
1984 display: grid;
1985 place-items: center;
1986 transition: border-color .12s, background .12s, color .12s;
1987
1988 &[aria-pressed="true"]="true""] {
1989 border-color: var(--ui-purple);
1990 background: var(--ui-purple-50);
1991 color: var(--ui-purple);
1992 }
1993
1994 svg {
1995 width: 15px;
1996 height: 15px;
1997 }
1998 }
1999 }
2000
2001 /* Sized to match the builder's own toggle field (.everest-forms-toggle-form in admin.scss,
2002 31x16 track) — this was noticeably larger than every other toggle in the builder. */
2003 #everest-forms-panel-style .switch {
2004 width: 32px;
2005 height: 18px;
2006 border-radius: 99px;
2007 background: #d4d7e0;
2008 position: relative;
2009 cursor: pointer;
2010 flex: none;
2011 transition: .2s;
2012 border: 0;
2013 padding: 0;
2014
2015 &::after {
2016 content: "";
2017 position: absolute;
2018 top: 2px;
2019 left: 2px;
2020 width: 14px;
2021 height: 14px;
2022 border-radius: 50%;
2023 background: #fff;
2024 transition: .2s;
2025 box-shadow: 0 1px 3px rgba(20, 23, 40, .2);
2026 }
2027
2028 /* Matches the builder's own toggle field's checked colour (.everest-forms-toggle-form
2029 input:checked + .slider in admin.scss) — lighter than --ui-green, which is tuned for
2030 icon/text contrast rather than a toggle track. */
2031 &[aria-checked="true"]="true""] {
2032 background: #4cc741;
2033 }
2034
2035 &[aria-checked="true"]="true""]::after {
2036 left: 16px;
2037 }
2038 }
2039
2040 #everest-forms-panel-style .mediactrl {
2041 display: flex;
2042 gap: 6px;
2043 align-items: center;
2044 }
2045
2046 #everest-forms-panel-style .mediabtn {
2047 flex: 1;
2048 height: var(--ui-ctrl-h);
2049 display: flex;
2050 align-items: center;
2051 justify-content: center;
2052 border: 1px dashed var(--ui-input-border);
2053 background: var(--ui-bg-subtle);
2054 border-radius: var(--ui-radius-md);
2055 padding: 0 9px;
2056 font-size: 12px;
2057 font-weight: 600;
2058 color: var(--ui-purple);
2059 cursor: pointer;
2060 transition: border-color .12s, background .12s;
2061
2062 &:hover {
2063 border-color: var(--ui-purple);
2064 background: var(--ui-purple-50);
2065 }
2066 }
2067
2068 #everest-forms-panel-style .mediaclear {
2069 width: var(--ui-ctrl-h);
2070 height: var(--ui-ctrl-h);
2071 display: grid;
2072 place-items: center;
2073 border: 1px solid var(--ui-input-border);
2074 background: #fff;
2075 border-radius: var(--ui-radius-md);
2076 color: var(--ui-ink-2);
2077 cursor: pointer;
2078 flex: none;
2079 transition: border-color .12s, color .12s;
2080
2081 svg {
2082 width: 14px;
2083 height: 14px;
2084 }
2085
2086 &:hover {
2087 border-color: var(--ui-red);
2088 color: var(--ui-red);
2089 }
2090 }
2091
2092 /* custom CSS pane */
2093 #everest-forms-panel-style .pane-note {
2094 display: flex;
2095 align-items: flex-start;
2096 gap: 8px;
2097 font-size: 11.5px;
2098 color: var(--ui-ink-3);
2099 line-height: 1.55;
2100 background: var(--ui-bg-subtle);
2101 border: 1px solid var(--ui-line-2);
2102 border-radius: var(--ui-radius-md);
2103 padding: 10px 12px;
2104 margin: 2px 0 14px;
2105
2106 b {
2107 color: var(--ui-ink-2);
2108 font-weight: 600;
2109 }
2110
2111 svg {
2112 width: 14px;
2113 height: 14px;
2114 flex: none;
2115 margin-top: 1px;
2116 color: var(--ui-ink-3);
2117 }
2118 }
2119
2120 #everest-forms-panel-style .chips {
2121 display: flex;
2122 flex-wrap: wrap;
2123 gap: 5px;
2124 margin-bottom: 8px;
2125
2126 button {
2127 border: 1px solid var(--ui-line);
2128 background: #fff;
2129 border-radius: var(--ui-radius-sm);
2130 padding: 4px 8px;
2131 font-size: 11.5px;
2132 font-family: ui-monospace, monospace;
2133 color: var(--ui-ink-2);
2134 cursor: pointer;
2135
2136 &:hover {
2137 background: var(--ui-bg-hover);
2138 border-color: var(--ui-purple);
2139 color: var(--ui-purple);
2140 }
2141 }
2142 }
2143
2144 #everest-forms-panel-style textarea.csscode {
2145 width: 100%;
2146 padding: 11px;
2147 border: 1px solid var(--ui-input-border);
2148 border-radius: var(--ui-radius-sm);
2149 font-family: ui-monospace, monospace;
2150 font-size: 12px;
2151 min-height: 180px;
2152 resize: vertical;
2153 line-height: 1.6;
2154 color: var(--ui-ink);
2155 background: var(--ui-bg-subtle);
2156 tab-size: 2;
2157
2158 &:focus {
2159 border-color: var(--ui-purple);
2160 box-shadow: var(--ui-focus-soft);
2161 outline: none;
2162 }
2163 }
2164
2165 #everest-forms-panel-style .css-status {
2166 display: flex;
2167 align-items: center;
2168 gap: 8px;
2169 margin-top: 8px;
2170 font-size: 11px;
2171 color: var(--ui-ink-3);
2172 }
2173
2174 /* templates pane */
2175 #everest-forms-panel-style .tpls {
2176 display: grid;
2177 /* minmax(0, 1fr): see .pal-pop-grid's identical comment — a "Custom" + "Base" caption must
2178 not blow out its track. */
2179 grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
2180 gap: 18px;
2181 margin-bottom: 8px;
2182 }
2183
2184 /* Hover/selected treatment mirrors .pal-card so the two feel like the same control language.
2185 The border lives on .tpl-thumb-box (the thumbnail only) — the design's own card borders just
2186 the preview, with the name sitting below it, un-bordered. */
2187 #everest-forms-panel-style .tpl {
2188 display: block;
2189 width: 100%;
2190 position: relative;
2191 cursor: pointer;
2192 text-align: left;
2193 padding: 0;
2194
2195 .tpl-thumb-box {
2196 position: relative;
2197 display: block;
2198 border: 1px solid var(--ui-line);
2199 border-radius: var(--ui-radius-md);
2200 overflow: hidden;
2201 background: #fff;
2202 transition: border-color .12s;
2203 }
2204
2205 &:hover .tpl-thumb-box {
2206 border-color: var(--ui-purple);
2207 }
2208
2209 /* The applied template gets its own border, not just the "Base"/"Modified" pill next to its
2210 name — the thumbnail itself should be the thing that visually stands out. */
2211 &[aria-pressed="true"]="true""] .tpl-thumb-box {
2212 border-color: var(--ui-purple);
2213 }
2214
2215 &:focus-visible {
2216 outline: none;
2217
2218 .tpl-thumb-box {
2219 border-color: var(--ui-purple);
2220 box-shadow: var(--ui-focus-soft);
2221 }
2222 }
2223
2224 .thumb {
2225 height: 122px;
2226 padding: 14px;
2227 display: flex;
2228 flex-direction: column;
2229 gap: 8px;
2230 justify-content: center;
2231 transition: filter .15s ease, opacity .15s ease;
2232 }
2233
2234 .thumb .l {
2235 height: 6px;
2236 width: 46%;
2237 border-radius: 3px;
2238 flex: none;
2239 }
2240
2241 .thumb .l2 {
2242 width: 30%;
2243 }
2244
2245 .thumb .f {
2246 height: 13px;
2247 border: 1px solid;
2248 border-radius: var(--ui-radius-sm);
2249 flex: none;
2250 }
2251
2252 .thumb .b {
2253 height: 12px;
2254 width: 42%;
2255 border-radius: var(--ui-radius-sm);
2256 flex: none;
2257 margin-top: 4px;
2258 }
2259
2260 .cap {
2261 margin-top: 10px;
2262 font-size: 12px;
2263 font-weight: 500;
2264 color: var(--ui-ink);
2265 }
2266
2267 .cap-name {
2268 margin-right: 6px;
2269 }
2270 }
2271
2272 #everest-forms-panel-style .tpl .thumb.thumb-has-img {
2273 padding: 6px;
2274 height: 122px;
2275 overflow: hidden;
2276 background: #fff;
2277 display: block;
2278
2279 img {
2280 width: 100%;
2281 height: 100%;
2282 object-fit: contain;
2283 object-position: center;
2284 display: block;
2285 }
2286 }
2287
2288 /* "Based on {built-in}" — a custom template's inferred parent, tucked under the template name. */
2289 #everest-forms-panel-style .tpl-parent {
2290 display: block;
2291 padding: 0 10px 9px;
2292 margin-top: -3px;
2293 font-size: 10px;
2294 font-weight: 500;
2295 line-height: 1.3;
2296 color: var(--ui-ink-3);
2297 white-space: nowrap;
2298 overflow: hidden;
2299 text-overflow: ellipsis;
2300 }
2301
2302 /* Locked (Pro) template card: dimmed thumbnail + PRO badge + a lock veil that fades in on hover. */
2303 #everest-forms-panel-style .tpl.tpl-locked {
2304 .thumb {
2305 opacity: .55;
2306 filter: saturate( .6 );
2307 }
2308
2309 .tpl-pro {
2310 position: absolute;
2311 top: 6px;
2312 right: 6px;
2313 z-index: 2;
2314 filter: drop-shadow(0 1px 2px rgba(20, 23, 40, .2));
2315
2316 .pro-crown {
2317 display: block;
2318 width: 20px;
2319 height: 20px;
2320 }
2321 }
2322
2323 &:hover .thumb {
2324 filter: saturate( .5 ) blur( .5px );
2325 }
2326 }
2327
2328 #everest-forms-panel-style .tpl-lock-veil {
2329 position: absolute;
2330 inset: 0;
2331 z-index: 1;
2332 display: grid;
2333 place-items: center;
2334 background: rgba(20, 23, 40, 0);
2335 color: #fff;
2336 opacity: 0;
2337 transition: opacity .15s ease, background .15s ease;
2338 pointer-events: none;
2339
2340 svg {
2341 width: 18px;
2342 height: 18px;
2343 filter: drop-shadow(0 1px 2px rgba(0, 0, 0, .35));
2344 }
2345 }
2346
2347 #everest-forms-panel-style .tpl.tpl-locked:hover .tpl-lock-veil {
2348 opacity: 1;
2349 background: rgba(20, 23, 40, .28);
2350 }
2351
2352 /* Locked "Create Style Template" box (save-your-own is Pro). */
2353 #everest-forms-panel-style .tpl-create-locked {
2354 text-decoration: none;
2355 opacity: 1;
2356 cursor: pointer;
2357
2358 &:hover {
2359 border-color: var(--ui-pro-cta);
2360 background: var(--ui-pro-card-bg);
2361
2362 .tpl-create-ic {
2363 background: var(--ui-pro-cta);
2364 color: #fff;
2365 }
2366 }
2367 }
2368
2369 /* Create Style Template card */
2370 #everest-forms-panel-style .tpl-create {
2371 display: flex;
2372 align-items: flex-start;
2373 gap: 12px;
2374 background: #fff;
2375 border: 1px solid var(--ui-line);
2376 border-radius: var(--ui-radius-lg);
2377 padding: 14px;
2378 margin-bottom: 18px;
2379 transition: border-color .15s ease, background .15s ease;
2380
2381 &:focus-within {
2382 border-color: var(--ui-purple);
2383 }
2384 }
2385
2386 /* Collapsed trigger — same shell as the open form (`.tpl-create`) so the swap doesn't jump in size. */
2387 #everest-forms-panel-style .tpl-create-trigger {
2388 width: 100%;
2389 text-align: left;
2390 border: 1px dashed var(--ui-line);
2391 cursor: pointer;
2392
2393 .tpl-create-sub {
2394 margin-bottom: 0;
2395 }
2396
2397 &:hover {
2398 border-color: var(--ui-purple);
2399 border-style: solid;
2400 background: var(--ui-purple-50);
2401
2402 .tpl-create-ic {
2403 background: var(--ui-purple);
2404 color: #fff;
2405 }
2406 }
2407
2408 &:focus-visible {
2409 outline: none;
2410 border-color: var(--ui-purple);
2411 border-style: solid;
2412 box-shadow: var(--ui-focus-soft);
2413 }
2414 }
2415
2416 #everest-forms-panel-style .tpl-create-ic {
2417 flex: none;
2418 display: grid;
2419 place-items: center;
2420 width: 32px;
2421 height: 32px;
2422 border-radius: 9px;
2423 background: var(--ui-purple-50);
2424 color: var(--ui-purple);
2425 transition: background .15s ease, color .15s ease;
2426
2427 svg {
2428 width: 16px;
2429 height: 16px;
2430 }
2431 }
2432
2433 #everest-forms-panel-style .tpl-create-fields {
2434 flex: 1;
2435 min-width: 0;
2436 }
2437
2438 #everest-forms-panel-style .tpl-create-title {
2439 display: flex;
2440 align-items: center;
2441 gap: 8px;
2442 font-size: 13px;
2443 font-weight: 600;
2444 color: var(--ui-ink);
2445 margin-bottom: 3px;
2446 }
2447
2448 #everest-forms-panel-style .tpl-create-sub {
2449 font-size: 11.5px;
2450 color: var(--ui-ink-3);
2451 margin: 0 0 10px;
2452 line-height: 1.5;
2453 }
2454
2455
2456 /* Card wrapper — the bordered card itself is the inner `.tpl` button; this just gives the
2457 edit/delete tools (and the inline delete-confirm) something to overlay, same structure as
2458 `.pal-card--wrap` for the colour-palette cards. */
2459 #everest-forms-panel-style .tpl-wrap {
2460 position: relative;
2461 }
2462
2463 #everest-forms-panel-style .tpl-wrap .tpl-card-tools {
2464 position: absolute;
2465 bottom: 5px;
2466 right: 5px;
2467 z-index: 3;
2468 display: flex;
2469 gap: 3px;
2470 opacity: 0;
2471 transition: opacity .12s;
2472 }
2473
2474 #everest-forms-panel-style .tpl-wrap:hover .tpl-card-tools,
2475 #everest-forms-panel-style .tpl-wrap:focus-within .tpl-card-tools {
2476 opacity: 1;
2477 }
2478
2479 #everest-forms-panel-style .tpl-tool {
2480 display: inline-flex;
2481 align-items: center;
2482 justify-content: center;
2483 width: 22px;
2484 height: 22px;
2485 padding: 0;
2486 border: 1px solid var(--ui-line);
2487 border-radius: var(--ui-radius-sm);
2488 background: #fff;
2489 box-shadow: 0 1px 3px rgba(20, 23, 40, .16);
2490 color: var(--ui-ink-3);
2491 cursor: pointer;
2492 transition: color .12s, border-color .12s, background .12s;
2493
2494 svg {
2495 width: 12px;
2496 height: 12px;
2497 }
2498
2499 &:hover {
2500 color: var(--ui-purple);
2501 border-color: var(--ui-purple);
2502 }
2503
2504 &.tpl-tool--danger:hover {
2505 color: var(--ui-red);
2506 border-color: var(--ui-red);
2507 }
2508
2509 &:focus-visible {
2510 outline: none;
2511 box-shadow: var(--ui-focus-soft);
2512 }
2513
2514 &:disabled {
2515 pointer-events: none;
2516 opacity: .4;
2517 }
2518 }
2519
2520 /* Inline delete confirm — replaces the card content, same treatment as `.pal-card-confirm`. */
2521 #everest-forms-panel-style .tpl-card-confirm {
2522 position: absolute;
2523 inset: 0;
2524 z-index: 4;
2525 display: flex;
2526 align-items: center;
2527 justify-content: center;
2528 gap: 6px;
2529 padding: 6px;
2530 background: rgba(255, 255, 255, .96);
2531 border-radius: var(--ui-radius-lg);
2532 font-size: 11px;
2533 font-weight: 600;
2534 color: var(--ui-ink-2);
2535
2536 button {
2537 border: 0;
2538 border-radius: var(--ui-radius-sm);
2539 padding: 3px 8px;
2540 font-size: 11px;
2541 font-weight: 600;
2542 cursor: pointer;
2543 }
2544
2545 .tpl-confirm-yes {
2546 background: var(--ui-red);
2547 color: #fff;
2548 }
2549
2550 .tpl-confirm-no {
2551 background: var(--ui-bg);
2552 color: var(--ui-ink-2);
2553 }
2554 }
2555
2556 /* Locked out while a DIFFERENT template is being edited — dimmed, inert, but still legible. */
2557 #everest-forms-panel-style .tpl.tpl-disabled {
2558 cursor: default;
2559 opacity: .5;
2560 pointer-events: none;
2561 }
2562
2563
2564 /* pro lock — matches the builder's own locked-field banner (evf-locked-fields.scss). */
2565 #everest-forms-panel-style .pro-lock {
2566 display: flex;
2567 align-items: center;
2568 gap: 10px;
2569 background: var(--ui-pro-card-bg);
2570 border: 1px solid var(--ui-pro-card-border);
2571 border-radius: var(--ui-radius-lg);
2572 padding: 10px 12px;
2573 font-size: 11.5px;
2574 color: var(--ui-ink-2);
2575 line-height: 1.5;
2576 margin-bottom: 14px;
2577
2578 a {
2579 color: var(--ui-pro-cta);
2580 font-weight: 700;
2581 text-decoration: underline;
2582 }
2583 }
2584
2585 #everest-forms-panel-style .pro-lock-ic {
2586 display: grid;
2587 place-items: center;
2588 width: 26px;
2589 height: 26px;
2590 border-radius: 7px;
2591 background: #fff;
2592 color: var(--ui-pro-cta);
2593 flex: none;
2594
2595 svg {
2596 width: 14px;
2597 height: 14px;
2598 }
2599 }
2600
2601 /* Full-slate Pro teaser (a whole Pro section opened on free — e.g. Messages). */
2602 #everest-forms-panel-style .pro-teaser {
2603 display: flex;
2604 flex-direction: column;
2605 align-items: center;
2606 text-align: center;
2607 gap: 10px;
2608 padding: 28px 20px;
2609 background: linear-gradient(180deg, var(--ui-pro-card-bg) 0%, #fff 100%);
2610 border: 1px solid var(--ui-pro-card-border);
2611 border-radius: var(--ui-radius-lg);
2612
2613 .pro-teaser-ic {
2614 display: grid;
2615 place-items: center;
2616 width: 44px;
2617 height: 44px;
2618 border-radius: 12px;
2619 background: #fff;
2620 border: 1px solid var(--ui-pro-card-border);
2621 color: var(--ui-pro-cta);
2622
2623 svg {
2624 width: 22px;
2625 height: 22px;
2626 }
2627 }
2628
2629 .pro-teaser-title {
2630 margin: 4px 0 0;
2631 font-size: 14px;
2632 font-weight: 600;
2633 color: var(--ui-ink);
2634 }
2635
2636 .pro-teaser-text {
2637 margin: 0;
2638 font-size: 12px;
2639 line-height: 1.6;
2640 color: var(--ui-ink-2);
2641 max-width: 280px;
2642 }
2643
2644 .pro-teaser-btn {
2645 margin-top: 6px;
2646 display: inline-flex;
2647 align-items: center;
2648 background: var(--ui-pro-cta);
2649 color: #fff;
2650 font-size: 12.5px;
2651 font-weight: 600;
2652 text-decoration: none;
2653 padding: 8px 16px;
2654 border-radius: var(--ui-radius-md);
2655 transition: background .12s;
2656
2657 &:hover {
2658 background: var(--ui-pro-cta-hover);
2659 }
2660 }
2661 }
2662
2663 /* "PRO" badge on a locked element-list row (e.g. the Messages row on free). */
2664 #everest-forms-panel-style .elrow.locked .ic {
2665 color: var(--ui-pro-cta);
2666 }
2667
2668 /* The builder's own locked-field crown badge — just a size box, not a redrawn background. */
2669 #everest-forms-panel-style .pro-badge {
2670 display: inline-flex;
2671 flex: none;
2672
2673 .pro-crown {
2674 display: block;
2675 width: 16px;
2676 height: 16px;
2677 }
2678 }
2679
2680 /* ---------- preview (portaled into the builder content area) ---------- */
2681 #everest-forms-panel-style #evf-scv2-preview {
2682 display: flex;
2683 flex-direction: column;
2684 height: 100%;
2685 width: 100%;
2686 }
2687
2688 #everest-forms-panel-style .preview {
2689 display: flex;
2690 flex-direction: column;
2691 min-width: 0;
2692 min-height: 0;
2693 flex: 1;
2694 width: 100%;
2695 position: relative;
2696 background: var(--ui-bg);
2697 /* Matches the Fields/Settings/Integrations content containers — the whole panel is one card. */
2698 border: 1px solid #e1e1e1;
2699 border-radius: 13px;
2700 overflow: hidden;
2701 }
2702
2703 /* Legacy → v2 migration notice — a standalone strip above the preview card. */
2704 #everest-forms-panel-style .pv-migration {
2705 display: flex;
2706 align-items: flex-start;
2707 gap: 10px;
2708 padding: 10px 14px;
2709 margin-bottom: 12px;
2710 background: var(--ui-purple-50);
2711 border: 1px solid var(--ui-purple-100);
2712 border-radius: var(--ui-radius-lg);
2713 color: var(--ui-ink-2);
2714 font-size: 12px;
2715 line-height: 1.55;
2716 flex: none;
2717
2718 .pv-migration-ic {
2719 flex: none;
2720 display: grid;
2721 place-items: center;
2722 width: 22px;
2723 height: 22px;
2724 border-radius: 50%;
2725 background: #fff;
2726 color: var(--ui-purple);
2727 margin-top: 1px;
2728
2729 svg {
2730 width: 13px;
2731 height: 13px;
2732 }
2733 }
2734
2735 .pv-migration-text {
2736 flex: 1;
2737 min-width: 0;
2738
2739 b {
2740 color: var(--ui-purple-600);
2741 font-weight: 600;
2742 }
2743 }
2744
2745 button {
2746 flex: none;
2747 border: 0;
2748 background: none;
2749 color: var(--ui-icon);
2750 cursor: pointer;
2751 width: 24px;
2752 height: 24px;
2753 border-radius: 50%;
2754 display: grid;
2755 place-items: center;
2756 margin-top: 1px;
2757
2758 svg {
2759 width: 13px;
2760 height: 13px;
2761 }
2762
2763 &:hover {
2764 background: rgba(117, 69, 187, .15);
2765 color: var(--ui-purple);
2766 }
2767 }
2768 }
2769
2770 #everest-forms-panel-style .pv-bar {
2771 min-height: 64px;
2772 display: flex;
2773 align-items: center;
2774 gap: 12px;
2775 padding: 16px 20px;
2776 border-bottom: 1px solid var(--ui-line);
2777 background: #fff;
2778 flex: none;
2779 flex-wrap: wrap;
2780 }
2781
2782 /* Matches the builder's own Settings/Integrations section title (.evf-content-section-title). */
2783 #everest-forms-panel-style .pv-bar .ttl {
2784 font-weight: 600;
2785 font-size: var(--ui-fs-xl);
2786 line-height: 1.3;
2787 color: var(--ui-ink);
2788 display: flex;
2789 align-items: center;
2790 gap: 7px;
2791 min-width: 0;
2792 flex: 1 1 auto;
2793 }
2794
2795 #everest-forms-panel-style .pv-bar .info {
2796 border: 0;
2797 background: none;
2798 color: var(--ui-icon);
2799 cursor: pointer;
2800 display: grid;
2801 place-items: center;
2802 width: 24px;
2803 height: 24px;
2804 border-radius: 50%;
2805 flex: none;
2806
2807 svg {
2808 width: 15px;
2809 height: 15px;
2810 }
2811
2812 &:hover {
2813 background: var(--ui-line-2);
2814 }
2815 }
2816
2817 #everest-forms-panel-style .pv-savestate {
2818 font-size: 11.5px;
2819 color: var(--ui-ink-3);
2820 display: inline-flex;
2821 align-items: center;
2822 gap: 6px;
2823
2824 &.is-dirty {
2825 color: var(--ui-amber);
2826 }
2827
2828 .save-check {
2829 width: 13px;
2830 height: 13px;
2831 flex: none;
2832 color: var(--ui-green);
2833 }
2834 }
2835
2836 #everest-forms-panel-style .devs {
2837 display: inline-flex;
2838 background: var(--ui-bg-subtle);
2839 border-radius: var(--ui-radius-md);
2840 padding: 3px;
2841 border: 1px solid var(--ui-line);
2842 margin-left: auto;
2843 flex: none;
2844
2845 button {
2846 border: 0;
2847 background: transparent;
2848 width: 36px;
2849 height: var(--ui-ctrl-h);
2850 border-radius: var(--ui-radius-sm);
2851 cursor: pointer;
2852 color: var(--ui-ink-3);
2853 display: grid;
2854 place-items: center;
2855 transition: background .15s, color .15s, box-shadow .15s;
2856
2857 &:hover:not([aria-pressed="true"]) {
2858 color: var(--ui-ink);
2859 background: rgba(255, 255, 255, .6);
2860 }
2861
2862 &[aria-pressed="true"]="true""] {
2863 background: #fff;
2864 color: var(--ui-purple);
2865 box-shadow: var(--ui-shadow-sm);
2866 }
2867
2868 svg {
2869 width: 16px;
2870 height: 16px;
2871 }
2872 }
2873 }
2874
2875 #everest-forms-panel-style .spin {
2876 width: 12px;
2877 height: 12px;
2878 border: 2px solid rgba(117, 69, 187, .3);
2879 border-top-color: var(--ui-purple);
2880 border-radius: 50%;
2881 animation: scv2spin .7s linear infinite;
2882 flex: none;
2883 display: inline-block;
2884 }
2885
2886 @keyframes scv2spin {
2887 to {
2888 transform: rotate(360deg);
2889 }
2890 }
2891
2892 #everest-forms-panel-style .save-dot {
2893 width: 7px;
2894 height: 7px;
2895 border-radius: 50%;
2896 background: var(--ui-amber);
2897 flex: none;
2898 display: inline-block;
2899 }
2900
2901 /* Non-blocking notice when the live-edit bridge (click-to-edit / hover) never wires up. */
2902 #everest-forms-panel-style .pv-noninteractive {
2903 display: flex;
2904 align-items: center;
2905 flex-wrap: wrap;
2906 gap: 6px 12px;
2907 padding: 8px 20px;
2908 background: var(--ui-amber-50);
2909 border-bottom: 1px solid var(--ui-amber-100);
2910 color: var(--ui-amber-700);
2911 font-size: 11.5px;
2912 line-height: 1.5;
2913 flex: none;
2914
2915 button {
2916 border: 1px solid var(--ui-amber-100);
2917 background: #fff;
2918 color: var(--ui-amber-700);
2919 font-weight: 600;
2920 font-size: 11px;
2921 border-radius: var(--ui-radius-sm);
2922 padding: 3px 10px;
2923 cursor: pointer;
2924 margin-left: auto;
2925
2926 &:hover {
2927 background: var(--ui-amber-100);
2928 }
2929 }
2930 }
2931
2932 #everest-forms-panel-style .pv-canvas {
2933 flex: 1;
2934 overflow: auto;
2935 display: flex;
2936 justify-content: center;
2937 align-items: stretch;
2938 padding: 14px;
2939 min-height: 0;
2940 background: var(--ui-bg);
2941 }
2942
2943 #everest-forms-panel-style .pv-frame {
2944 width: 100%;
2945 max-width: 100%;
2946 position: relative;
2947 display: flex;
2948 flex-direction: column;
2949 min-height: 0;
2950 }
2951
2952 #everest-forms-panel-style .pv-iframe {
2953 width: 100%;
2954 flex: 1;
2955 min-height: 480px;
2956 border: 0;
2957 background: #fff;
2958 border-radius: var(--ui-radius-lg);
2959 display: block;
2960 /* Hidden until the bridge hides the preview chrome, so the raw page never flashes. */
2961 opacity: 0;
2962 transition: opacity .3s ease;
2963 }
2964
2965 #everest-forms-panel-style .pv-iframe.is-ready {
2966 opacity: 1;
2967 }
2968
2969 /* skeleton / error overlays */
2970 #everest-forms-panel-style .pv-skel {
2971 position: absolute;
2972 inset: 0;
2973 background: var(--ui-bg);
2974 z-index: 20;
2975 display: flex;
2976 flex-direction: column;
2977 align-items: center;
2978 justify-content: center;
2979 gap: 18px;
2980 transition: opacity .3s;
2981 }
2982
2983 #everest-forms-panel-style .skel-card {
2984 width: min(560px, 80%);
2985 background: #fff;
2986 border-radius: var(--ui-radius-lg);
2987 padding: 30px;
2988 box-shadow: var(--ui-shadow);
2989 }
2990
2991 #everest-forms-panel-style .skel-bar {
2992 height: 12px;
2993 border-radius: var(--ui-radius-md);
2994 background: linear-gradient(90deg, #eceef3 25%, #f6f7fa 50%, #eceef3 75%);
2995 background-size: 200% 100%;
2996 animation: scv2shimmer 1.4s infinite;
2997 margin-bottom: 14px;
2998 }
2999
3000 @keyframes scv2shimmer {
3001 to {
3002 background-position: -200% 0;
3003 }
3004 }
3005
3006 /* Sidebar controls skeleton — shown instantly while the schema loads. */
3007 #everest-forms-panel-style .scv2-skel-tabs {
3008 display: flex;
3009 gap: 0;
3010 }
3011
3012 #everest-forms-panel-style .scv2-skel-tabs span {
3013 flex: 1;
3014 height: 45px;
3015 background: #f6f7f9;
3016 border-top: 3px solid transparent;
3017 }
3018
3019 #everest-forms-panel-style .scv2-skel-body {
3020 padding: 18px 14px;
3021 }
3022
3023 #everest-forms-panel-style .skel-note {
3024 font-size: 12px;
3025 color: var(--ui-ink-3);
3026 }
3027
3028 #everest-forms-panel-style .pv-error {
3029 position: absolute;
3030 inset: 0;
3031 z-index: 25;
3032 display: flex;
3033 align-items: center;
3034 justify-content: center;
3035 padding: 24px;
3036 background: var(--ui-bg);
3037 }
3038
3039 #everest-forms-panel-style .pv-error .card {
3040 background: #fff;
3041 border: 1px solid var(--ui-line);
3042 border-radius: var(--ui-radius-lg);
3043 box-shadow: var(--ui-shadow);
3044 padding: 26px 30px;
3045 max-width: 420px;
3046 text-align: center;
3047
3048 h4 {
3049 margin: 0 0 6px;
3050 font-size: 15px;
3051 color: var(--ui-ink);
3052 }
3053
3054 p {
3055 margin: 0 0 16px;
3056 font-size: 12.5px;
3057 color: var(--ui-ink-3);
3058 line-height: 1.55;
3059 }
3060
3061 a {
3062 color: var(--ui-purple);
3063 font-weight: 600;
3064 text-decoration: none;
3065 }
3066 }
3067
3068 #everest-forms-panel-style .pv-error-actions {
3069 display: flex;
3070 align-items: center;
3071 justify-content: center;
3072 gap: 14px;
3073
3074 .btn-primary {
3075 border: 0;
3076 background: var(--ui-purple);
3077 color: #fff;
3078 font-weight: 600;
3079 font-size: 12.5px;
3080 border-radius: var(--ui-radius-md);
3081 padding: 8px 16px;
3082 cursor: pointer;
3083
3084 &:hover {
3085 background: var(--ui-purple-600);
3086 }
3087 }
3088 }
3089
3090 #everest-forms-panel-style .skel-note {
3091 display: inline-flex;
3092 align-items: center;
3093 gap: 8px;
3094 }
3095
3096 #everest-forms-panel-style .css-example-btn {
3097 margin-left: auto;
3098 border: 0;
3099 background: none;
3100 color: var(--ui-purple);
3101 font-weight: 600;
3102 cursor: pointer;
3103 font-size: 11px;
3104 }
3105
3106 /* toast — a neutral dark base with a coloured left accent + icon distinguishing error/success/info. */
3107 #everest-forms-panel-style .toast {
3108 position: absolute;
3109 bottom: 22px;
3110 left: 50%;
3111 transform: translate(-50%, 0);
3112 background: #1f2433;
3113 color: #fff;
3114 border-radius: var(--ui-radius-lg);
3115 border-left: 3px solid rgba(255, 255, 255, .25);
3116 padding: 10px 12px 10px 14px;
3117 font-size: var(--ui-fs-sm);
3118 display: flex;
3119 align-items: center;
3120 gap: 12px;
3121 box-shadow: var(--ui-shadow-lg);
3122 z-index: 50;
3123 max-width: 80%;
3124 animation: scv2toastin .18s ease-out;
3125
3126 .toast-ic {
3127 flex: none;
3128 display: grid;
3129 place-items: center;
3130 width: 18px;
3131 height: 18px;
3132
3133 svg {
3134 width: 16px;
3135 height: 16px;
3136 }
3137 }
3138
3139 &.is-success {
3140 border-left-color: var(--ui-green);
3141
3142 .toast-ic {
3143 color: #4ade80;
3144 }
3145 }
3146
3147 &.is-error {
3148 border-left-color: var(--ui-red);
3149
3150 .toast-ic {
3151 color: #f87171;
3152 }
3153 }
3154
3155 button {
3156 border: 0;
3157 background: rgba(255, 255, 255, .14);
3158 color: #fff;
3159 border-radius: var(--ui-radius-sm);
3160 padding: 6px 12px;
3161 font-size: 12px;
3162 font-weight: 600;
3163 cursor: pointer;
3164 white-space: nowrap;
3165 flex: none;
3166 }
3167 }
3168
3169 @keyframes scv2toastin {
3170 from {
3171 opacity: 0;
3172 transform: translate(-50%, 6px);
3173 }
3174 to {
3175 opacity: 1;
3176 transform: translate(-50%, 0);
3177 }
3178 }
3179
3180 /* confirm modal — a real centered/backdropped dialog, distinct from the anchored .scv2-pop. */
3181 #everest-forms-panel-style .scv2-modal-backdrop {
3182 position: fixed;
3183 inset: 0;
3184 z-index: 100010;
3185 background: rgba(20, 23, 40, .45);
3186 display: flex;
3187 align-items: center;
3188 justify-content: center;
3189 padding: 20px;
3190 animation: scv2fadein .12s ease-out;
3191 }
3192
3193 @keyframes scv2fadein {
3194 from {
3195 opacity: 0;
3196 }
3197 to {
3198 opacity: 1;
3199 }
3200 }
3201
3202 #everest-forms-panel-style .scv2-modal {
3203 width: min(360px, 100%);
3204 background: #fff;
3205 border-radius: var(--ui-radius-lg);
3206 box-shadow: var(--ui-shadow-lg);
3207 padding: 20px;
3208 animation: scv2popin .15s ease-out;
3209 }
3210
3211 #everest-forms-panel-style .scv2-modal-title {
3212 margin: 0 0 8px;
3213 font-size: var(--ui-fs-base);
3214 font-weight: 600;
3215 color: var(--ui-ink);
3216 }
3217
3218 #everest-forms-panel-style .scv2-modal-msg {
3219 margin: 0;
3220 font-size: var(--ui-fs-sm);
3221 color: var(--ui-ink-2);
3222 line-height: 1.55;
3223 }
3224
3225 #everest-forms-panel-style .scv2-modal-actions {
3226 display: flex;
3227 justify-content: flex-end;
3228 gap: 8px;
3229 margin-top: 18px;
3230 }
3231
3232 #everest-forms-panel-style .scv2-modal-cancel {
3233 border: 1px solid var(--ui-input-border);
3234 background: #fff;
3235 color: var(--ui-ink-2);
3236 font-weight: 600;
3237 font-size: 12.5px;
3238 border-radius: var(--ui-radius-md);
3239 padding: 8px 16px;
3240 cursor: pointer;
3241 transition: border-color .12s, background .12s;
3242
3243 &:hover {
3244 background: var(--ui-bg-hover);
3245 }
3246 }
3247
3248 #everest-forms-panel-style .scv2-modal-confirm {
3249 border: 0;
3250 background: var(--ui-purple);
3251 color: #fff;
3252 font-weight: 600;
3253 font-size: 12.5px;
3254 border-radius: var(--ui-radius-md);
3255 padding: 8px 16px;
3256 cursor: pointer;
3257 transition: background .12s;
3258
3259 &:hover {
3260 background: var(--ui-purple-600);
3261 }
3262
3263 &.danger {
3264 background: var(--ui-red);
3265
3266 &:hover {
3267 background: #b91c1c;
3268 }
3269 }
3270 }
3271
3272 /* floating popover */
3273 #everest-forms-panel-style .scv2-pop {
3274 position: fixed;
3275 z-index: 100000;
3276 background: #fff;
3277 border: 1px solid var(--ui-line);
3278 border-radius: var(--ui-radius-md);
3279 box-shadow: var(--ui-shadow-lg);
3280 padding: 6px;
3281 min-width: 200px;
3282 max-width: 300px;
3283 /* Single scroll for the whole popover; .pop-head's `position:sticky` relies on this. */
3284 max-height: 460px;
3285 overflow-y: auto;
3286 transform-origin: top center;
3287 animation: scv2popin .12s ease-out;
3288 }
3289
3290 @keyframes scv2popin {
3291 from {
3292 opacity: 0;
3293 transform: scale( .98 ) translateY(-2px);
3294 }
3295 to {
3296 opacity: 1;
3297 transform: scale(1) translateY(0);
3298 }
3299 }
3300
3301 #everest-forms-panel-style .scv2-pop .pop-head {
3302 display: flex;
3303 align-items: center;
3304 justify-content: space-between;
3305 gap: 8px;
3306 padding: 8px 6px 8px 10px;
3307 border-bottom: 1px solid var(--ui-line-2);
3308 margin-bottom: 4px;
3309 position: sticky;
3310 top: 0;
3311 background: #fff;
3312 z-index: 1;
3313 }
3314
3315 #everest-forms-panel-style .scv2-pop .pop-head-title {
3316 font-size: 11px;
3317 font-weight: 600;
3318 color: var(--ui-ink);
3319 letter-spacing: .02em;
3320 line-height: 1.4;
3321 }
3322
3323 #everest-forms-panel-style .scv2-pop .pop-close {
3324 flex: none;
3325 display: inline-flex;
3326 align-items: center;
3327 justify-content: center;
3328 width: 24px;
3329 height: 24px;
3330 padding: 0;
3331 border: 0;
3332 border-radius: 5px;
3333 background: transparent;
3334 color: var(--ui-ink-3);
3335 cursor: pointer;
3336 transition: background .12s, color .12s;
3337
3338 svg {
3339 width: 15px;
3340 height: 15px;
3341 }
3342
3343 &:hover {
3344 background: var(--ui-bg-hover);
3345 color: var(--ui-ink);
3346 }
3347
3348 /* Same recipe every other button in the panel gets (--ui-focus), not a one-off outline. */
3349 &:focus-visible {
3350 outline: none;
3351 box-shadow: var(--ui-focus);
3352 }
3353 }
3354
3355 #everest-forms-panel-style .scv2-pop .pop-title {
3356 font-size: 10.5px;
3357 font-weight: 600;
3358 color: var(--ui-ink-3);
3359 letter-spacing: .05em;
3360 text-transform: uppercase;
3361 padding: 8px 10px 6px;
3362 line-height: 1.45;
3363
3364 b {
3365 color: var(--ui-ink);
3366 font-weight: 600;
3367 text-transform: none;
3368 letter-spacing: 0;
3369 }
3370 }
3371
3372 #everest-forms-panel-style .scv2-pop .pop-item {
3373 display: flex;
3374 align-items: center;
3375 gap: 8px;
3376 width: 100%;
3377 border: 0;
3378 background: none;
3379 text-align: left;
3380 padding: 8px 10px;
3381 border-radius: var(--ui-radius-sm);
3382 font-size: 12.5px;
3383 color: var(--ui-ink);
3384 cursor: pointer;
3385
3386 &:hover:not(:disabled) {
3387 background: var(--ui-bg-hover);
3388 }
3389
3390 &.danger {
3391 color: var(--ui-red);
3392 }
3393
3394 &.danger:hover {
3395 background: var(--ui-red-50);
3396 }
3397 }
3398
3399 #everest-forms-panel-style .scv2-pop .pop-body {
3400 padding: 8px 10px;
3401 font-size: 12px;
3402 color: var(--ui-ink-2);
3403 line-height: 1.55;
3404 }
3405
3406 #everest-forms-panel-style .scv2-pop .pop-sep {
3407 height: 1px;
3408 background: var(--ui-line-2);
3409 margin: 5px 4px;
3410 }
3411
3412 /* hover/focus tooltip */
3413 #everest-forms-panel-style .scv2-hovertip {
3414 position: fixed;
3415 z-index: 100001;
3416 pointer-events: none;
3417 max-width: 260px;
3418 padding: 9px 12px;
3419 background: #fff;
3420 border: 1px solid var(--ui-line);
3421 border-radius: var(--ui-radius-md);
3422 box-shadow: var(--ui-shadow-lg);
3423 font-size: 12px;
3424 line-height: 1.5;
3425 color: var(--ui-ink-2);
3426 animation: scv2tipin .1s ease-out;
3427 }
3428
3429 @keyframes scv2tipin {
3430 from {
3431 opacity: 0;
3432 transform: translateY(-2px);
3433 }
3434 to {
3435 opacity: 1;
3436 transform: translateY(0);
3437 }
3438 }
3439
3440 #everest-forms-panel-style .scv2-hovertip.is-top {
3441 transform-origin: bottom center;
3442 }
3443
3444 #everest-forms-panel-style .scv2-hovertip .hovertip-title {
3445 font-size: 10.5px;
3446 font-weight: 600;
3447 color: var(--ui-ink-3);
3448 letter-spacing: .05em;
3449 text-transform: uppercase;
3450 margin-bottom: 4px;
3451
3452 b {
3453 color: var(--ui-ink);
3454 font-weight: 600;
3455 text-transform: none;
3456 letter-spacing: 0;
3457 }
3458 }
3459
3460 #everest-forms-panel-style .scv2-hovertip .hovertip-body {
3461 color: var(--ui-ink-2);
3462
3463 b {
3464 color: var(--ui-ink);
3465 font-weight: 600;
3466 }
3467 }
3468
3469 /* palette popover grid — scrolls as part of the single .scv2-pop scroll, not on its own. */
3470 #everest-forms-panel-style .pal-pop-grid {
3471 display: grid;
3472 /* minmax(0, 1fr), not 1fr: a card whose caption grows two badges wide (e.g. "Custom" + "Base"
3473 on a currently-applied custom palette) must not blow out its track past the sidebar's
3474 width — plain 1fr still honours each item's auto min-width (its unclamped content size). */
3475 grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
3476 gap: 18px;
3477 padding: 4px;
3478 margin-bottom: 8px;
3479 }
3480
3481 #everest-forms-panel-style .pal-card {
3482 text-align: left;
3483
3484 /* The border lives on .pal-card-thumb (just the swatches), not here — the design's own
3485 card puts a border around the colour dots only; the name sits below it, un-bordered. */
3486 .pal-card-thumb {
3487 display: flex;
3488 border: 1px solid var(--ui-line-2);
3489 border-radius: var(--ui-radius-md);
3490 background: #fff;
3491 padding: 12px;
3492 transition: border-color .12s;
3493 }
3494
3495 .pal-card-apply:hover .pal-card-thumb {
3496 border-color: var(--ui-purple);
3497 }
3498
3499 /* The applied preset gets its own border, not just the "Base" pill next to its name — the
3500 swatch box itself should be the thing that visually stands out. */
3501 .pal-card-apply[aria-selected="true"]="true""] .pal-card-thumb {
3502 border-color: var(--ui-purple);
3503 }
3504
3505 /* Smaller than the single-column "Your Palette" card's 24px dots (see .pal-editor-head) —
3506 a 2-up grid in a 400px sidebar doesn't have room for the design's full-size swatches;
3507 6 × 24px + gaps overflows the ~150px a grid column actually has to work with. */
3508 .sw {
3509 display: flex;
3510 gap: 4px;
3511 justify-content: flex-start;
3512 }
3513
3514 .sw i {
3515 width: 20px;
3516 height: 20px;
3517 border-radius: 50%;
3518 flex: none;
3519 box-shadow: inset 0 0 0 1px rgba(20, 23, 40, .1);
3520 }
3521
3522 /* The badge sits right after the name in normal text flow, so it rides along with the name
3523 onto a second line rather than staying pinned to a fixed row. `padding-right` keeps
3524 the text clear of the hover-revealed delete tool, bottom-right. */
3525 .cap {
3526 font-size: 12px;
3527 font-weight: 500;
3528 color: var(--ui-ink);
3529 margin-top: 6px;
3530 padding-right: 28px;
3531 }
3532
3533 .cap-name {
3534 margin-right: 6px;
3535 }
3536
3537 /* Same crown badge as .pro-badge elsewhere in the panel. */
3538 .pro {
3539 display: inline-flex;
3540 flex-shrink: 0;
3541 margin-left: auto;
3542
3543 .pro-crown {
3544 display: block;
3545 width: 14px;
3546 height: 14px;
3547 }
3548 }
3549 }
3550
3551 /* custom colour palettes (PaletteManager) */
3552 #everest-forms-panel-style .pal-group-label {
3553 font-size: var(--ui-fs-xs);
3554 font-weight: 600;
3555 letter-spacing: .04em;
3556 text-transform: uppercase;
3557 color: var(--ui-ink-3);
3558 margin: 12px 2px 8px;
3559
3560 &:first-child {
3561 margin-top: 2px;
3562 }
3563 }
3564
3565 /* Small bordered icon button — the palette editor's open/close toggle, and (nested inside
3566 .pal-card--wrap below) each preset card's delete tool. Standalone so both contexts get it. */
3567 #everest-forms-panel-style .pal-tool {
3568 display: inline-flex;
3569 align-items: center;
3570 justify-content: center;
3571 width: 22px;
3572 height: 22px;
3573 padding: 0;
3574 border: 1px solid var(--ui-line);
3575 border-radius: var(--ui-radius-sm);
3576 background: #fff;
3577 box-shadow: 0 1px 3px rgba(20, 23, 40, .16);
3578 color: var(--ui-ink-3);
3579 cursor: pointer;
3580 flex: none;
3581 transition: color .12s, border-color .12s, background .12s;
3582
3583 svg {
3584 width: 12px;
3585 height: 12px;
3586 }
3587
3588 &:hover {
3589 color: var(--ui-purple);
3590 border-color: var(--ui-purple);
3591 background: #fff;
3592 }
3593
3594 &.pal-tool--danger:hover {
3595 color: var(--ui-red);
3596 border-color: var(--ui-red);
3597 }
3598
3599 &.is-locked {
3600 color: var(--ui-purple);
3601 border-color: var(--ui-purple-100);
3602 background: var(--ui-purple-50);
3603 }
3604
3605 .pro-crown {
3606 display: block;
3607 width: 13px;
3608 height: 13px;
3609 }
3610
3611 &:focus-visible {
3612 outline: none;
3613 box-shadow: var(--ui-focus-soft);
3614 }
3615 }
3616
3617 #everest-forms-panel-style .pal-card--wrap {
3618 position: relative;
3619 padding: 0;
3620
3621 .pal-card-apply {
3622 display: block;
3623 width: 100%;
3624 border: 0;
3625 background: none;
3626 padding: 0;
3627 text-align: left;
3628 cursor: pointer;
3629
3630 &:focus-visible {
3631 outline: none;
3632
3633 .pal-card-thumb {
3634 box-shadow: var(--ui-focus-soft);
3635 }
3636 }
3637 }
3638
3639 /* tools overlay bottom-right, revealed on hover. */
3640 .pal-card-tools {
3641 position: absolute;
3642 bottom: 5px;
3643 right: 5px;
3644 display: flex;
3645 gap: 3px;
3646 opacity: 0;
3647 transition: opacity .12s;
3648 }
3649
3650 &:hover .pal-card-tools,
3651 &:focus-within .pal-card-tools {
3652 opacity: 1;
3653 }
3654
3655 /* inline delete confirm */
3656 .pal-card-confirm {
3657 position: absolute;
3658 inset: 0;
3659 display: flex;
3660 align-items: center;
3661 justify-content: center;
3662 gap: 6px;
3663 padding: 6px;
3664 background: rgba(255, 255, 255, .96);
3665 border-radius: var(--ui-radius-md);
3666 font-size: 11px;
3667 font-weight: 600;
3668 color: var(--ui-ink-2);
3669
3670 button {
3671 border: 0;
3672 border-radius: var(--ui-radius-sm);
3673 padding: 3px 8px;
3674 font-size: 11px;
3675 font-weight: 600;
3676 cursor: pointer;
3677 }
3678
3679 .pal-confirm-yes {
3680 background: var(--ui-red);
3681 color: #fff;
3682 }
3683
3684 .pal-confirm-no {
3685 background: var(--ui-bg);
3686 color: var(--ui-ink-2);
3687 }
3688 }
3689 }
3690
3691 /* "Your Palette" editor card — the live 6 slots, always shown with the same purple ring a
3692 selected preset gets elsewhere (it IS the permanently-current one). Swatches + open/close
3693 toggle stay visible whether collapsed or expanded; the edit rows and Save/Cancel only render
3694 while `editing`. */
3695 #everest-forms-panel-style .pal-editor-card {
3696 background: #fff;
3697 border: 1px solid var(--ui-purple);
3698 border-radius: var(--ui-radius-md);
3699 padding: 12px;
3700 }
3701
3702 #everest-forms-panel-style .pal-editor-head {
3703 display: flex;
3704 align-items: center;
3705 gap: 8px;
3706
3707 .sw {
3708 display: flex;
3709 flex: 1;
3710 gap: 6px;
3711 }
3712
3713 .sw i {
3714 width: 24px;
3715 height: 24px;
3716 border-radius: 50%;
3717 flex: none;
3718 box-shadow: inset 0 0 0 1px rgba(20, 23, 40, .1);
3719 }
3720
3721 .pro-badge {
3722 flex: none;
3723 }
3724 }
3725
3726 /* The editor's own open/close toggle — bigger than the tiny .pal-tool delete buttons, with a
3727 quiet grey border (the purple ring is on the card itself, not this button). */
3728 #everest-forms-panel-style .pal-editor-toggle {
3729 width: 36px;
3730 height: 32px;
3731 flex: none;
3732 display: inline-flex;
3733 align-items: center;
3734 justify-content: center;
3735 border: 1px solid var(--ui-line);
3736 border-radius: var(--ui-radius-md);
3737 background: #fff;
3738 color: var(--ui-purple);
3739 cursor: pointer;
3740 transition: background .12s;
3741
3742 svg {
3743 width: 14px;
3744 height: 14px;
3745 }
3746
3747 &:hover {
3748 background: var(--ui-bg-hover);
3749 }
3750
3751 &:focus-visible {
3752 outline: none;
3753 box-shadow: var(--ui-focus-soft);
3754 }
3755 }
3756
3757 #everest-forms-panel-style .pal-edit-actions {
3758 display: flex;
3759 gap: 8px;
3760 padding-top: 4px;
3761 }
3762
3763 #everest-forms-panel-style .pal-edit-save,
3764 #everest-forms-panel-style .pal-edit-cancel {
3765 height: 32px;
3766 padding: 0 12px;
3767 border-radius: var(--ui-radius-md);
3768 font-size: 12px;
3769 font-weight: 500;
3770 cursor: pointer;
3771 transition: background .12s, color .12s, border-color .12s;
3772 }
3773
3774 #everest-forms-panel-style .pal-edit-save {
3775 border: 0;
3776 background: var(--ui-purple);
3777 color: #fff;
3778
3779 &:hover {
3780 background: var(--ui-purple-600);
3781 }
3782 }
3783
3784 #everest-forms-panel-style .pal-edit-cancel {
3785 border: 1px solid var(--ui-line);
3786 background: #fff;
3787 color: var(--ui-ink-2);
3788
3789 &:hover {
3790 background: var(--ui-bg-hover);
3791 }
3792 }
3793
3794 /* Name + status pill for "Your Palette", read below the card — same pattern the "Your
3795 Template" preview card uses for its own caption. Fixed ink colour, not accent-tinted — the
3796 design keeps every palette/preset name the same colour, whatever its own swatches are. */
3797 #everest-forms-panel-style .pal-current-caption {
3798 display: flex;
3799 align-items: center;
3800 gap: 6px;
3801 margin: 10px 2px 0;
3802 }
3803
3804 #everest-forms-panel-style .pal-current-name {
3805 font-size: 12px;
3806 font-weight: 500;
3807 color: var(--ui-ink);
3808 }
3809
3810 #everest-forms-panel-style .pal-manager-hint {
3811 margin: 12px 2px 2px;
3812 padding-top: 10px;
3813 border-top: 1px solid var(--ui-line-2);
3814 font-size: 11px;
3815 line-height: 1.45;
3816 color: var(--ui-ink-3);
3817 }
3818
3819 /* ---- editor view ---- */
3820 #everest-forms-panel-style .pal-editor-back {
3821 display: flex;
3822 align-items: center;
3823 gap: 8px;
3824 width: 100%;
3825 padding: 7px 8px;
3826 margin-bottom: 12px;
3827 border: 0;
3828 border-radius: var(--ui-radius-md);
3829 background: var(--ui-bg-subtle);
3830 cursor: pointer;
3831 text-align: left;
3832 transition: background .12s;
3833
3834 .pal-editor-back-arrow {
3835 width: 16px;
3836 height: 16px;
3837 flex: none;
3838 color: var(--ui-ink-3);
3839 transition: transform .12s, color .12s;
3840 }
3841
3842 .pal-editor-title {
3843 font-size: 12.5px;
3844 font-weight: 600;
3845 color: var(--ui-ink);
3846 min-width: 0;
3847 overflow: hidden;
3848 text-overflow: ellipsis;
3849 white-space: nowrap;
3850 }
3851
3852 &:hover:not(:disabled) {
3853 background: var(--ui-purple-50);
3854
3855 .pal-editor-back-arrow {
3856 color: var(--ui-purple);
3857 transform: translateX(-2px);
3858 }
3859
3860 .pal-editor-title {
3861 color: var(--ui-purple);
3862 }
3863 }
3864
3865 &:focus-visible {
3866 outline: none;
3867 box-shadow: var(--ui-focus);
3868 }
3869
3870 &:disabled {
3871 cursor: default;
3872 opacity: .7;
3873 }
3874 }
3875
3876 #everest-forms-panel-style .pal-editor-sub {
3877 margin: -6px 4px 14px;
3878 font-size: 12px;
3879 line-height: 1.45;
3880 color: var(--ui-ink-2);
3881 }
3882
3883 #everest-forms-panel-style .pal-name-field {
3884 display: block;
3885 margin: 0 4px 14px;
3886
3887 .pal-field-label {
3888 display: block;
3889 float: none;
3890 width: auto;
3891 margin: 0 0 6px;
3892 padding: 0;
3893 font-size: var(--ui-fs-xs);
3894 font-weight: 600;
3895 line-height: 1.4;
3896 color: var(--ui-ink-3);
3897 }
3898
3899 input[type="text"]="text""] {
3900 display: block;
3901 float: none;
3902 width: 100%;
3903 height: var(--ui-ctrl-h);
3904 margin: 0;
3905 border: 1px solid var(--ui-input-border);
3906 border-radius: var(--ui-radius-md);
3907 padding: 0 10px;
3908 font-size: 12.5px;
3909 color: var(--ui-ink);
3910 background: #fff;
3911 outline: none;
3912 box-shadow: none;
3913 transition: border-color .12s, box-shadow .12s;
3914
3915 &:focus {
3916 border-color: var(--ui-purple);
3917 box-shadow: var(--ui-focus-soft);
3918 }
3919 }
3920 }
3921
3922 /* A plain, airy list — no boxed/bordered container — so editing a slot feels like part of the
3923 same light card language as the rest of "Your Palette", not a dense element-control list. */
3924 #everest-forms-panel-style .pal-edit-rows {
3925 margin-top: 12px;
3926 display: flex;
3927 flex-direction: column;
3928 gap: 10px;
3929 }
3930
3931 #everest-forms-panel-style .pal-edit-row {
3932 display: flex;
3933 align-items: center;
3934 justify-content: space-between;
3935 gap: 10px;
3936
3937 .pal-edit-label {
3938 font-size: 12px;
3939 color: var(--ui-ink-2);
3940 min-width: 0;
3941 overflow: hidden;
3942 text-overflow: ellipsis;
3943 white-space: nowrap;
3944 }
3945
3946 .color {
3947 flex: none;
3948 width: 108px;
3949 }
3950
3951 .color .swatch {
3952 width: 20px;
3953 height: 20px;
3954 }
3955 }
3956
3957 #everest-forms-panel-style .pal-error {
3958 margin: 10px 4px 0;
3959 font-size: 11.5px;
3960 color: var(--ui-red);
3961 line-height: 1.4;
3962 }
3963
3964 #everest-forms-panel-style .pal-editor-actions {
3965 display: flex;
3966 gap: 8px;
3967 margin: 16px 4px 2px;
3968 padding-top: 12px;
3969 border-top: 1px solid var(--ui-line-2);
3970 /* The editor can run taller than the popover's own max-height (see .scv2-pop's single-scroll
3971 comment) — pin Cancel/Save to the bottom of that scroll so they're never scrolled out of view. */
3972 position: sticky;
3973 bottom: 0;
3974 background: #fff;
3975 z-index: 1;
3976
3977 button {
3978 flex: 1;
3979 height: 32px;
3980 border-radius: var(--ui-radius-md);
3981 font-size: 12.5px;
3982 font-weight: 600;
3983 cursor: pointer;
3984 transition: background .12s, border-color .12s, color .12s, opacity .12s;
3985
3986 &:disabled {
3987 opacity: .6;
3988 cursor: default;
3989 }
3990
3991 &:focus-visible {
3992 outline: none;
3993 box-shadow: var(--ui-focus);
3994 }
3995 }
3996
3997 .pal-btn-ghost {
3998 border: 1px solid var(--ui-input-border);
3999 background: #fff;
4000 color: var(--ui-ink-2);
4001
4002 &:hover:not(:disabled) {
4003 border-color: var(--ui-ink-3);
4004 }
4005 }
4006
4007 .pal-btn-primary {
4008 border: 1px solid var(--ui-purple);
4009 background: var(--ui-purple);
4010 color: #fff;
4011
4012 &:hover:not(:disabled) {
4013 background: var(--ui-purple-600);
4014 border-color: var(--ui-purple-600);
4015 }
4016 }
4017 }
4018
4019 /* AI styling launcher (AiAssistant.tsx) styles itself inline since it's portaled to <body>. */
4020