PluginProbe ʕ •ᴥ•ʔ
FrontBlocks for Gutenberg/GeneratePress / 1.5.2
FrontBlocks for Gutenberg/GeneratePress v1.5.2
1.5.2 1.5.1 1.4.0 1.5.0 trunk 0.2.0 0.2.1 0.2.2 0.2.3 0.2.4 0.2.5 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.1.0 1.2.0 1.2.1 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 ci-artifacts
frontblocks / assets / admin / settings-src.css
frontblocks / assets / admin Last commit date
icons 1 week ago custom-post-types.js 8 months ago redundant-plugins-notice.js 3 days ago review-notice.js 5 days ago settings-src.css 3 days ago settings.css 3 days ago
settings-src.css
797 lines
1 /**
2 * FrontBlocks Admin Settings Styles
3 *
4 * @package FrontBlocks
5 * @author Closemarketing
6 * @copyright 2025 Closemarketing
7 */
8
9 @config "../../tailwind.config.js";
10 @import "tailwindcss";
11
12 /* Custom WordPress Admin overrides */
13 .frbl-settings-wrapper {
14 margin-left: -20px;
15 margin-top: -10px;
16 padding-top: 40px;
17 }
18
19 .frbl-settings-wrapper * {
20 box-sizing: border-box;
21 }
22
23 /* Custom toggle switch component */
24 .frbl-toggle {
25 position: relative;
26 display: inline-flex;
27 height: 1.75rem;
28 width: 3.25rem;
29 flex-shrink: 0;
30 cursor: pointer;
31 border-radius: 9999px;
32 border: 2px solid transparent;
33 transition-property: color, background-color, border-color;
34 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
35 transition-duration: 200ms;
36 background-color: #d1d5db;
37 }
38
39 .frbl-toggle:hover {
40 background-color: #9ca3af;
41 }
42
43 .frbl-toggle:focus-within {
44 outline: 2px solid transparent;
45 outline-offset: 2px;
46 box-shadow: 0 0 0 3px rgba(104, 125, 249, 0.3);
47 }
48
49 .frbl-toggle input {
50 position: absolute;
51 width: 1px;
52 height: 1px;
53 padding: 0;
54 margin: -1px;
55 overflow: hidden;
56 clip: rect(0, 0, 0, 0);
57 white-space: nowrap;
58 border-width: 0;
59 }
60
61 /* Toggle background when checked */
62 .frbl-toggle:has(input:checked) {
63 background-color: #687df9;
64 }
65
66 .frbl-toggle:has(input:checked):hover {
67 background-color: #5565ed;
68 }
69
70 /* Toggle dot/knob - always white */
71 .frbl-toggle span {
72 pointer-events: none;
73 display: inline-block;
74 height: 1.25rem;
75 width: 1.25rem;
76 border-radius: 9999px;
77 background-color: #ffffff;
78 box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
79 transform: translateX(0.125rem);
80 transition-property: transform;
81 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
82 transition-duration: 200ms;
83 position: relative;
84 top: 0.125rem;
85 }
86
87 /* Move the knob when checked - keep it white */
88 .frbl-toggle input:checked + span {
89 transform: translateX(1.5rem);
90 background-color: #ffffff;
91 }
92
93 /* Disabled state */
94 .frbl-toggle:has(input:disabled) {
95 opacity: 0.5;
96 cursor: not-allowed;
97 }
98
99 .frbl-toggle:has(input:disabled):hover {
100 background-color: #d1d5db;
101 }
102
103 /* Custom checkbox styling */
104 .frbl-checkbox {
105 height: 1.25rem;
106 width: 1.25rem;
107 border-radius: 0.25rem;
108 border-color: #d1d5db;
109 color: #687df9;
110 transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
111 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
112 transition-duration: 150ms;
113 cursor: pointer;
114 }
115
116 .frbl-checkbox:focus {
117 outline: 2px solid transparent;
118 outline-offset: 2px;
119 box-shadow: 0 0 0 3px rgba(104, 125, 249, 0.3);
120 }
121
122 /* Success message styling */
123 .frbl-notice-success {
124 border-radius: 0.5rem;
125 background-color: #f0fdf4;
126 border-left-width: 4px;
127 border-color: #4ade80;
128 padding: 1rem;
129 margin-bottom: 1.5rem;
130 }
131
132 .frbl-notice-success p {
133 font-size: 0.875rem;
134 line-height: 1.25rem;
135 color: #15803d;
136 }
137
138 /* Info badge */
139 .frbl-info-badge {
140 display: inline-flex;
141 align-items: center;
142 padding: 0.125rem 0.625rem;
143 border-radius: 9999px;
144 font-size: 0.75rem;
145 line-height: 1rem;
146 font-weight: 500;
147 background-color: #f3f4f6;
148 color: #1f2937;
149 }
150
151 /* Card hover effect */
152 .frbl-card:hover {
153 box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
154 transition-property: box-shadow;
155 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
156 transition-duration: 200ms;
157 }
158
159 /* Smooth animations */
160 @keyframes slideIn {
161 from {
162 opacity: 0;
163 transform: translateY(10px);
164 }
165 to {
166 opacity: 1;
167 transform: translateY(0);
168 }
169 }
170
171 .frbl-animate-slide-in {
172 animation: slideIn 0.3s ease-out;
173 }
174
175 /* Restored from commit 564a0a6 (lost when settings.css was rebuilt without this block).
176 * Includes feature grid/cards, license field tweaks, and FormsCRM-style license UI.
177 */
178 /* Custom styles for license fields */
179 .frbl-settings-wrapper .tw\:text-base:not(button) {
180 font-size: 1rem;
181 line-height: 1.5rem;
182 width: 100%;
183 }
184
185 .frbl-settings-wrapper .tw\:flex {
186 display: flex;
187 column-gap: 20px;
188 }
189
190 /* Submit button width */
191 .frbl-settings-wrapper .tw\:w-1\/2 {
192 width: 50%;
193 }
194
195 /* Features Grid Layout */
196 .frbl-section-wrapper {
197 margin-bottom: 3rem;
198 }
199
200 .frbl-section-header {
201 margin-bottom: 1.5rem;
202 }
203
204 .frbl-features-grid {
205 display: grid;
206 grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
207 gap: 1.25rem;
208 }
209
210 /* Feature Card Styles */
211 .frbl-feature-card {
212 position: relative;
213 background: #ffffff;
214 border: 1px solid #e5e7eb;
215 border-radius: 12px;
216 padding: 1.5rem;
217 transition: all 0.2s ease;
218 overflow: hidden;
219 display: flex;
220 flex-direction: column;
221 min-height: 80px;
222 }
223
224 .frbl-feature-card:hover {
225 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
226 transform: translateY(-2px);
227 border-color: #687df9;
228 }
229
230 /* PRO Badge */
231 .frbl-pro-badge {
232 position: absolute;
233 top: 0;
234 left: 0;
235 background: linear-gradient(135deg, #ec4899 0%, #f97316 100%);
236 color: #ffffff;
237 font-size: 0.625rem;
238 font-weight: 700;
239 letter-spacing: 0.05em;
240 padding: 0.25rem 0.75rem;
241 border-radius: 0 0 12px 0;
242 box-shadow: 0 2px 4px rgba(236, 72, 153, 0.3);
243 z-index: 10;
244 }
245
246 /* Feature Card Content */
247 .frbl-feature-content {
248 display: flex;
249 align-items: center;
250 justify-content: space-between;
251 flex-wrap: wrap;
252 gap: 1rem;
253 min-height: 3rem;
254 }
255
256 /* Feature Icon */
257 .frbl-feature-icon {
258 flex-shrink: 0;
259 width: 2.5rem;
260 height: 2.5rem;
261 display: flex;
262 align-items: center;
263 justify-content: center;
264 background: linear-gradient(135deg, #f3f4f6 0%, #e5e7eb 100%);
265 border-radius: 10px;
266 color: #687df9;
267 transition: all 0.2s ease;
268 }
269
270 .frbl-feature-card:hover .frbl-feature-icon {
271 background: linear-gradient(135deg, #e0e3fc 0%, #d0d4fb 100%);
272 transform: scale(1.05);
273 }
274
275 .frbl-feature-icon svg {
276 width: 1.5rem;
277 height: 1.5rem;
278 stroke-width: 2;
279 }
280
281 /* Feature Info */
282 .frbl-feature-info {
283 flex: 1;
284 min-width: 160px;
285 display: flex;
286 align-items: center;
287 flex-direction: column;
288 }
289
290 .frbl-feature-title {
291 font-size: 0.9375rem;
292 font-weight: 600;
293 color: #1f2937;
294 margin: 0;
295 line-height: 1.5;
296 }
297
298 .frbl-feature-description {
299 font-size: 0.8125rem;
300 color: #6b7280;
301 margin: 0.25rem 0 0 0;
302 line-height: 1.4;
303 }
304
305 /* Active Feature Cards */
306 .frbl-feature-card.frbl-feature-active {
307 background: linear-gradient(135deg, #ffffff 0%, #f0fdf4 100%);
308 border-color: #d1fae5;
309 }
310
311 .frbl-feature-card.frbl-feature-active:hover {
312 border-color: #10b981;
313 }
314
315 .frbl-feature-card.frbl-feature-active .frbl-feature-icon {
316 background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);
317 color: #10b981;
318 }
319
320 .frbl-feature-card.frbl-feature-active:hover .frbl-feature-icon {
321 background: linear-gradient(135deg, #a7f3d0 0%, #6ee7b7 100%);
322 }
323
324 /* Active cards need vertical layout for description */
325 .frbl-feature-card.frbl-feature-active .frbl-feature-info {
326 flex-direction: column;
327 align-items: flex-start;
328 }
329
330 /* Active cards don't have toggle, so don't use space-between */
331 .frbl-feature-card.frbl-feature-active .frbl-feature-content {
332 justify-content: flex-start;
333 }
334
335 /* Feature Toggle */
336 .frbl-feature-toggle {
337 flex-shrink: 0;
338 display: flex;
339 align-items: center;
340 }
341
342 /*
343 * Sub-settings panels (Scroll to Top position, Events type, etc.) are rendered
344 * inside .frbl-feature-toggle and moved below the card by JS once the field is
345 * enabled. This is a CSS-only fallback so the card still lays out correctly
346 * (instead of squeezing the title/description into a sliver) if JS hasn't run yet.
347 */
348 .frbl-feature-toggle:has( input:checked ):has( > div[id$='-settings-wrapper'] ),
349 .frbl-feature-toggle:has( input:checked ):has( > div[id$='-type-wrapper'] ) {
350 flex: 1 1 100%;
351 flex-wrap: wrap;
352 justify-content: space-between;
353 }
354
355 .frbl-feature-toggle > div[id$='-settings-wrapper'],
356 .frbl-feature-toggle > div[id$='-type-wrapper'] {
357 flex: 1 1 100%;
358 width: 100%;
359 }
360
361 /* PRO info-only cards (no toggle, same layout as active cards) */
362 .frbl-feature-card.frbl-feature-pro.frbl-feature-pro-info .frbl-feature-info {
363 flex-direction: column;
364 align-items: flex-start;
365 }
366
367 .frbl-feature-card.frbl-feature-pro.frbl-feature-pro-info .frbl-feature-content {
368 justify-content: flex-start;
369 }
370
371 /* PRO Card Styles */
372 .frbl-feature-card.frbl-feature-pro {
373 background: linear-gradient(135deg, #ffffff 0%, #fef3f2 100%);
374 border-color: #fee2e2;
375 }
376
377 .frbl-feature-card.frbl-feature-pro:hover {
378 border-color: #ec4899;
379 }
380
381 .frbl-feature-card.frbl-feature-pro .frbl-feature-icon {
382 background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);
383 color: #ec4899;
384 }
385
386 .frbl-feature-card.frbl-feature-pro:hover .frbl-feature-icon {
387 background: linear-gradient(135deg, #fecaca 0%, #fca5a5 100%);
388 }
389
390 /* Disabled state for PRO features without license */
391 .frbl-feature-card.frbl-feature-pro .frbl-toggle:has(input:disabled) {
392 opacity: 0.6;
393 }
394
395 /* Locked PRO feature (no active license) */
396 .frbl-feature-card.frbl-feature-locked {
397 background: linear-gradient(135deg, #ffffff 0%, #fff1f2 100%);
398 border-color: #fecdd3;
399 opacity: 0.85;
400 }
401
402 .frbl-feature-card.frbl-feature-locked:hover {
403 border-color: #ef4444;
404 transform: none;
405 }
406
407 .frbl-feature-card.frbl-feature-locked .frbl-feature-icon {
408 background: linear-gradient(135deg, #fecdd3 0%, #fca5a5 100%);
409 color: #ef4444;
410 }
411
412 .frbl-feature-card.frbl-feature-locked .frbl-feature-info {
413 flex-direction: column;
414 align-items: flex-start;
415 }
416
417 .frbl-feature-card.frbl-feature-locked .frbl-feature-content {
418 justify-content: flex-start;
419 }
420
421 .frbl-feature-card.frbl-feature-locked .frbl-pro-badge {
422 background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
423 }
424
425 .frbl-feature-card.frbl-feature-locked .frbl-feature-description a {
426 color: #ef4444;
427 font-weight: 600;
428 text-decoration: underline;
429 }
430
431 /* Responsive adjustments */
432 @media (max-width: 768px) {
433 .frbl-features-grid {
434 grid-template-columns: 1fr;
435 }
436
437 .frbl-feature-card {
438 padding: 1.25rem;
439 }
440 }
441
442 @media (min-width: 768px) and (max-width: 1024px) {
443 .frbl-features-grid {
444 grid-template-columns: repeat(2, 1fr);
445 }
446 }
447
448
449 /* =============================================
450 License Management Styles (Complete & Independent)
451 Based on FormsCRM but standalone for FrontBlocks
452 ============================================= */
453
454 /* License Wrapper - Grid Layout */
455 .formscrm-license-wrapper {
456 display: grid;
457 grid-template-columns: 1fr 320px;
458 gap: 24px;
459 max-width: 1200px;
460 margin: 20px 0;
461 }
462
463 @media (max-width: 900px) {
464 .formscrm-license-wrapper {
465 grid-template-columns: 1fr;
466 }
467 }
468
469 /* Main Card */
470 .formscrm-card {
471 background: #fff;
472 border: 1px solid #e5e7eb;
473 border-radius: 12px;
474 padding: 32px;
475 box-shadow: 0 1px 3px rgba(0,0,0,0.05);
476 }
477
478 .formscrm-card-header {
479 margin-bottom: 24px;
480 padding-bottom: 20px;
481 border-bottom: 1px solid #e5e7eb;
482 }
483
484 .formscrm-card-header h2 {
485 margin: 0 0 8px 0;
486 font-size: 1.5rem;
487 font-weight: 600;
488 color: #1f2937;
489 }
490
491 .formscrm-card-header p {
492 margin: 0;
493 color: #6b7280;
494 font-size: 0.875rem;
495 }
496
497 /* Form Elements */
498 .formscrm-form-group {
499 margin-bottom: 24px;
500 }
501
502 .formscrm-label {
503 display: block;
504 font-weight: 600;
505 color: #374151;
506 margin-bottom: 8px;
507 font-size: 0.875rem;
508 }
509
510 .formscrm-input-group {
511 display: flex;
512 gap: 12px;
513 align-items: center;
514 }
515
516 .formscrm-input {
517 flex: 1;
518 padding: 12px 16px;
519 border: 1px solid #d1d5db;
520 border-radius: 8px;
521 font-size: 1rem;
522 transition: all 0.2s;
523 background: #fff;
524 }
525
526 .formscrm-input:focus {
527 outline: none;
528 border-color: #8b5cf6;
529 box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.15);
530 }
531
532 .formscrm-input[readonly] {
533 background: #f9fafb;
534 color: #6b7280;
535 cursor: not-allowed;
536 }
537
538 /* Deactivate Label */
539 .formscrm-deactivate-label {
540 display: flex;
541 align-items: center;
542 gap: 8px;
543 padding: 12px 16px;
544 background: #fef2f2;
545 border: 1px solid #fecaca;
546 border-radius: 8px;
547 cursor: pointer;
548 transition: background 0.2s;
549 white-space: nowrap;
550 }
551
552 .formscrm-deactivate-label:hover {
553 background: #fee2e2;
554 }
555
556 .formscrm-deactivate-label input {
557 margin: 0;
558 }
559
560 .formscrm-deactivate-label span {
561 font-size: 0.875rem;
562 font-weight: 600;
563 color: #dc2626;
564 }
565
566 /* Help Text */
567 .formscrm-help-text {
568 margin: 8px 0 0 0;
569 font-size: 0.75rem;
570 color: #9ca3af;
571 }
572
573 /* Status Box */
574 .formscrm-status-box {
575 display: flex;
576 align-items: center;
577 gap: 12px;
578 padding: 14px 18px;
579 border-radius: 8px;
580 border: 2px solid;
581 }
582
583 .formscrm-status-active {
584 background: #dcfce7;
585 border-color: #86efac;
586 color: #166534;
587 }
588
589 .formscrm-status-expired {
590 background: #fee2e2;
591 border-color: #fca5a5;
592 color: #991b1b;
593 }
594
595 .formscrm-status-inactive {
596 background: #fef9c3;
597 border-color: #fde047;
598 color: #854d0e;
599 }
600
601 .formscrm-status-icon {
602 display: flex;
603 flex-shrink: 0;
604 }
605
606 .formscrm-icon,
607 .fcod-icon {
608 width: 22px;
609 height: 22px;
610 }
611
612 .formscrm-status-text {
613 font-weight: 700;
614 font-size: 1rem;
615 }
616
617 /* Notices */
618 .formscrm-notice {
619 padding: 14px 18px;
620 border-radius: 8px;
621 margin-bottom: 20px;
622 }
623
624 .formscrm-notice p {
625 margin: 0;
626 font-size: 0.875rem;
627 line-height: 1.5;
628 }
629
630 .formscrm-notice a {
631 font-weight: 600;
632 text-decoration: underline;
633 }
634
635 .formscrm-notice-info {
636 background: #f0f9ff;
637 border: 1px solid #bfdbfe;
638 color: #1e40af;
639 }
640
641 .formscrm-notice-info a {
642 color: #1d4ed8;
643 }
644
645 .formscrm-notice-error {
646 background: #fef2f2;
647 border: 1px solid #fecaca;
648 color: #991b1b;
649 }
650
651 .formscrm-notice-error a {
652 color: #dc2626;
653 }
654
655 /* Form Actions */
656 .formscrm-form-actions {
657 margin-top: 24px;
658 padding-top: 24px;
659 border-top: 1px solid #e5e7eb;
660 }
661
662 /* Buttons - FrontBlocks Purple Style */
663 .formscrm-button {
664 display: inline-flex;
665 align-items: center;
666 padding: 12px 24px;
667 border-radius: 8px;
668 font-size: 1rem;
669 font-weight: 600;
670 cursor: pointer;
671 transition: all 0.2s;
672 border: none;
673 }
674
675 .formscrm-button-primary {
676 background: #8b5cf6;
677 color: #fff;
678 }
679
680 .formscrm-button-primary:hover {
681 background: #7c3aed;
682 box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
683 }
684
685 /* Info Card (Sidebar) */
686 .formscrm-info-card {
687 background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
688 border: 1px solid #e2e8f0;
689 border-radius: 12px;
690 padding: 24px;
691 height: fit-content;
692 }
693
694 .formscrm-info-card h3 {
695 margin: 0 0 12px 0;
696 font-size: 1.125rem;
697 font-weight: 700;
698 color: #1e293b;
699 }
700
701 .formscrm-info-card p {
702 margin: 0 0 16px 0;
703 font-size: 0.875rem;
704 color: #64748b;
705 line-height: 1.5;
706 }
707
708 /* Benefits List */
709 .formscrm-benefits-list {
710 margin: 0;
711 padding: 0;
712 list-style: none;
713 }
714
715 .formscrm-benefits-list li {
716 position: relative;
717 padding-left: 28px;
718 margin-bottom: 10px;
719 font-size: 0.875rem;
720 color: #475569;
721 }
722
723 .formscrm-benefits-list li::before {
724 content: "";
725 position: absolute;
726 left: 0;
727 top: 0;
728 color: #8b5cf6;
729 font-weight: 700;
730 font-size: 1.125rem;
731 }
732
733 /* Sticky save bar — keeps the Save Settings button reachable without scrolling to the bottom of a long form. */
734 .frbl-settings-save-bar {
735 position: sticky;
736 bottom: 1.5rem;
737 z-index: 20;
738 padding: 1.5rem;
739 background: rgba(255, 255, 255, 0.92);
740 backdrop-filter: blur(4px);
741 border: 1px solid #e5e7eb;
742 border-radius: 0.5rem;
743 box-shadow: 0 4px 12px -6px rgba(15, 23, 42, 0.12);
744 }
745
746 /* Cookie notice live preview: renders the real frontend banner markup/styles
747 confined to a small "stage" instead of position: fixed over the whole screen. */
748 .frbl-cookie-notice-preview-stage {
749 position: relative;
750 height: 360px;
751 background: transparent;
752 }
753
754 .frbl-cookie-notice-preview {
755 position: absolute !important;
756 z-index: 1;
757 max-width: calc(100% - 24px);
758 }
759
760 .frbl-cookie-notice-preview.frbl-cookie-notice--bar {
761 inset: auto 0 0 0;
762 }
763
764 .frbl-cookie-notice-preview.frbl-cookie-notice--box {
765 bottom: 12px;
766 }
767
768 .frbl-cookie-notice-preview.frbl-cookie-notice--box.frbl-cookie-notice--right {
769 right: 12px;
770 }
771
772 .frbl-cookie-notice-preview.frbl-cookie-notice--box.frbl-cookie-notice--left {
773 left: 12px;
774 }
775
776 .frbl-cookie-notice-preview.frbl-cookie-notice--popup {
777 position: absolute !important;
778 inset: 0;
779 background-color: rgba(15, 23, 42, 0.35);
780 padding: 12px;
781 }
782
783 /* Responsive adjustments */
784 @media (max-width: 640px) {
785 .frbl-settings-wrapper {
786 margin-left: 0;
787 }
788
789 .frbl-settings-wrapper .tw\:flex.tw\:items-center.tw\:justify-between {
790 @apply tw:flex-col tw:items-start tw:space-y-4;
791 }
792
793 .frbl-settings-save-bar {
794 @apply tw:flex-col tw:items-start tw:space-y-4;
795 }
796 }
797