PluginProbe ʕ •ᴥ•ʔ
FrontBlocks for Gutenberg/GeneratePress / trunk
FrontBlocks for Gutenberg/GeneratePress vtrunk
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 6 months ago settings-src.css 1 week ago settings.css 1 week ago
settings-src.css
725 lines
1 /**
2 * FrontBlocks Admin Settings Styles
3 *
4 * @package FrontBlocks
5 * @author Closemarketing
6 * @copyright 2025 Closemarketing
7 */
8
9 @tailwind base;
10 @tailwind components;
11 @tailwind utilities;
12
13 /* Custom WordPress Admin overrides */
14 .frbl-settings-wrapper {
15 margin-left: -20px;
16 margin-top: -10px;
17 padding-top: 40px;
18 }
19
20 .frbl-settings-wrapper * {
21 box-sizing: border-box;
22 }
23
24 /* Custom toggle switch component */
25 .frbl-toggle {
26 position: relative;
27 display: inline-flex;
28 height: 1.75rem;
29 width: 3.25rem;
30 flex-shrink: 0;
31 cursor: pointer;
32 border-radius: 9999px;
33 border: 2px solid transparent;
34 transition-property: color, background-color, border-color;
35 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
36 transition-duration: 200ms;
37 background-color: #d1d5db;
38 }
39
40 .frbl-toggle:hover {
41 background-color: #9ca3af;
42 }
43
44 .frbl-toggle:focus-within {
45 outline: 2px solid transparent;
46 outline-offset: 2px;
47 box-shadow: 0 0 0 3px rgba(104, 125, 249, 0.3);
48 }
49
50 .frbl-toggle input {
51 position: absolute;
52 width: 1px;
53 height: 1px;
54 padding: 0;
55 margin: -1px;
56 overflow: hidden;
57 clip: rect(0, 0, 0, 0);
58 white-space: nowrap;
59 border-width: 0;
60 }
61
62 /* Toggle background when checked */
63 .frbl-toggle:has(input:checked) {
64 background-color: #687df9;
65 }
66
67 .frbl-toggle:has(input:checked):hover {
68 background-color: #5565ed;
69 }
70
71 /* Toggle dot/knob - always white */
72 .frbl-toggle span {
73 pointer-events: none;
74 display: inline-block;
75 height: 1.25rem;
76 width: 1.25rem;
77 border-radius: 9999px;
78 background-color: #ffffff;
79 box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
80 transform: translateX(0.125rem);
81 transition-property: transform;
82 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
83 transition-duration: 200ms;
84 position: relative;
85 top: 0.125rem;
86 }
87
88 /* Move the knob when checked - keep it white */
89 .frbl-toggle input:checked + span {
90 transform: translateX(1.5rem);
91 background-color: #ffffff;
92 }
93
94 /* Disabled state */
95 .frbl-toggle:has(input:disabled) {
96 opacity: 0.5;
97 cursor: not-allowed;
98 }
99
100 .frbl-toggle:has(input:disabled):hover {
101 background-color: #d1d5db;
102 }
103
104 /* Custom checkbox styling */
105 .frbl-checkbox {
106 height: 1.25rem;
107 width: 1.25rem;
108 border-radius: 0.25rem;
109 border-color: #d1d5db;
110 color: #687df9;
111 transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
112 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
113 transition-duration: 150ms;
114 cursor: pointer;
115 }
116
117 .frbl-checkbox:focus {
118 outline: 2px solid transparent;
119 outline-offset: 2px;
120 box-shadow: 0 0 0 3px rgba(104, 125, 249, 0.3);
121 }
122
123 /* Success message styling */
124 .frbl-notice-success {
125 border-radius: 0.5rem;
126 background-color: #f0fdf4;
127 border-left-width: 4px;
128 border-color: #4ade80;
129 padding: 1rem;
130 margin-bottom: 1.5rem;
131 }
132
133 .frbl-notice-success p {
134 font-size: 0.875rem;
135 line-height: 1.25rem;
136 color: #15803d;
137 }
138
139 /* Info badge */
140 .frbl-info-badge {
141 display: inline-flex;
142 align-items: center;
143 padding: 0.125rem 0.625rem;
144 border-radius: 9999px;
145 font-size: 0.75rem;
146 line-height: 1rem;
147 font-weight: 500;
148 background-color: #f3f4f6;
149 color: #1f2937;
150 }
151
152 /* Card hover effect */
153 .frbl-card:hover {
154 box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
155 transition-property: box-shadow;
156 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
157 transition-duration: 200ms;
158 }
159
160 /* Smooth animations */
161 @keyframes slideIn {
162 from {
163 opacity: 0;
164 transform: translateY(10px);
165 }
166 to {
167 opacity: 1;
168 transform: translateY(0);
169 }
170 }
171
172 .frbl-animate-slide-in {
173 animation: slideIn 0.3s ease-out;
174 }
175
176 /* Restored from commit 564a0a6 (lost when settings.css was rebuilt without this block).
177 * Includes feature grid/cards, license field tweaks, and FormsCRM-style license UI.
178 */
179 /* Custom styles for license fields */
180 .frbl-settings-wrapper .tw-text-base:not(button) {
181 font-size: 1rem;
182 line-height: 1.5rem;
183 width: 100%;
184 }
185
186 .frbl-settings-wrapper .tw-flex {
187 display: flex;
188 column-gap: 20px;
189 }
190
191 /* Submit button width */
192 .frbl-settings-wrapper .tw-w-1\/2 {
193 width: 50%;
194 }
195
196 /* Features Grid Layout */
197 .frbl-section-wrapper {
198 margin-bottom: 3rem;
199 }
200
201 .frbl-section-header {
202 margin-bottom: 1.5rem;
203 }
204
205 .frbl-features-grid {
206 display: grid;
207 grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
208 gap: 1.25rem;
209 }
210
211 /* Feature Card Styles */
212 .frbl-feature-card {
213 position: relative;
214 background: #ffffff;
215 border: 1px solid #e5e7eb;
216 border-radius: 12px;
217 padding: 1.5rem;
218 transition: all 0.2s ease;
219 overflow: hidden;
220 display: flex;
221 flex-direction: column;
222 min-height: 80px;
223 }
224
225 .frbl-feature-card:hover {
226 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
227 transform: translateY(-2px);
228 border-color: #687df9;
229 }
230
231 /* PRO Badge */
232 .frbl-pro-badge {
233 position: absolute;
234 top: 0;
235 left: 0;
236 background: linear-gradient(135deg, #ec4899 0%, #f97316 100%);
237 color: #ffffff;
238 font-size: 0.625rem;
239 font-weight: 700;
240 letter-spacing: 0.05em;
241 padding: 0.25rem 0.75rem;
242 border-radius: 0 0 12px 0;
243 box-shadow: 0 2px 4px rgba(236, 72, 153, 0.3);
244 z-index: 10;
245 }
246
247 /* Feature Card Content */
248 .frbl-feature-content {
249 display: flex;
250 align-items: center;
251 justify-content: space-between;
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: 0;
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 /* PRO info-only cards (no toggle, same layout as active cards) */
343 .frbl-feature-card.frbl-feature-pro.frbl-feature-pro-info .frbl-feature-info {
344 flex-direction: column;
345 align-items: flex-start;
346 }
347
348 .frbl-feature-card.frbl-feature-pro.frbl-feature-pro-info .frbl-feature-content {
349 justify-content: flex-start;
350 }
351
352 /* PRO Card Styles */
353 .frbl-feature-card.frbl-feature-pro {
354 background: linear-gradient(135deg, #ffffff 0%, #fef3f2 100%);
355 border-color: #fee2e2;
356 }
357
358 .frbl-feature-card.frbl-feature-pro:hover {
359 border-color: #ec4899;
360 }
361
362 .frbl-feature-card.frbl-feature-pro .frbl-feature-icon {
363 background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);
364 color: #ec4899;
365 }
366
367 .frbl-feature-card.frbl-feature-pro:hover .frbl-feature-icon {
368 background: linear-gradient(135deg, #fecaca 0%, #fca5a5 100%);
369 }
370
371 /* Disabled state for PRO features without license */
372 .frbl-feature-card.frbl-feature-pro .frbl-toggle:has(input:disabled) {
373 opacity: 0.6;
374 }
375
376 /* Locked PRO feature (no active license) */
377 .frbl-feature-card.frbl-feature-locked {
378 background: linear-gradient(135deg, #ffffff 0%, #fff1f2 100%);
379 border-color: #fecdd3;
380 opacity: 0.85;
381 }
382
383 .frbl-feature-card.frbl-feature-locked:hover {
384 border-color: #ef4444;
385 transform: none;
386 }
387
388 .frbl-feature-card.frbl-feature-locked .frbl-feature-icon {
389 background: linear-gradient(135deg, #fecdd3 0%, #fca5a5 100%);
390 color: #ef4444;
391 }
392
393 .frbl-feature-card.frbl-feature-locked .frbl-feature-info {
394 flex-direction: column;
395 align-items: flex-start;
396 }
397
398 .frbl-feature-card.frbl-feature-locked .frbl-feature-content {
399 justify-content: flex-start;
400 }
401
402 .frbl-feature-card.frbl-feature-locked .frbl-pro-badge {
403 background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
404 }
405
406 .frbl-feature-card.frbl-feature-locked .frbl-feature-description a {
407 color: #ef4444;
408 font-weight: 600;
409 text-decoration: underline;
410 }
411
412 /* Responsive adjustments */
413 @media (max-width: 768px) {
414 .frbl-features-grid {
415 grid-template-columns: 1fr;
416 }
417
418 .frbl-feature-card {
419 padding: 1.25rem;
420 }
421 }
422
423 @media (min-width: 768px) and (max-width: 1024px) {
424 .frbl-features-grid {
425 grid-template-columns: repeat(2, 1fr);
426 }
427 }
428
429
430 /* =============================================
431 License Management Styles (Complete & Independent)
432 Based on FormsCRM but standalone for FrontBlocks
433 ============================================= */
434
435 /* License Wrapper - Grid Layout */
436 .formscrm-license-wrapper {
437 display: grid;
438 grid-template-columns: 1fr 320px;
439 gap: 24px;
440 max-width: 1200px;
441 margin: 20px 0;
442 }
443
444 @media (max-width: 900px) {
445 .formscrm-license-wrapper {
446 grid-template-columns: 1fr;
447 }
448 }
449
450 /* Main Card */
451 .formscrm-card {
452 background: #fff;
453 border: 1px solid #e5e7eb;
454 border-radius: 12px;
455 padding: 32px;
456 box-shadow: 0 1px 3px rgba(0,0,0,0.05);
457 }
458
459 .formscrm-card-header {
460 margin-bottom: 24px;
461 padding-bottom: 20px;
462 border-bottom: 1px solid #e5e7eb;
463 }
464
465 .formscrm-card-header h2 {
466 margin: 0 0 8px 0;
467 font-size: 1.5rem;
468 font-weight: 600;
469 color: #1f2937;
470 }
471
472 .formscrm-card-header p {
473 margin: 0;
474 color: #6b7280;
475 font-size: 0.875rem;
476 }
477
478 /* Form Elements */
479 .formscrm-form-group {
480 margin-bottom: 24px;
481 }
482
483 .formscrm-label {
484 display: block;
485 font-weight: 600;
486 color: #374151;
487 margin-bottom: 8px;
488 font-size: 0.875rem;
489 }
490
491 .formscrm-input-group {
492 display: flex;
493 gap: 12px;
494 align-items: center;
495 }
496
497 .formscrm-input {
498 flex: 1;
499 padding: 12px 16px;
500 border: 1px solid #d1d5db;
501 border-radius: 8px;
502 font-size: 1rem;
503 transition: all 0.2s;
504 background: #fff;
505 }
506
507 .formscrm-input:focus {
508 outline: none;
509 border-color: #8b5cf6;
510 box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.15);
511 }
512
513 .formscrm-input[readonly] {
514 background: #f9fafb;
515 color: #6b7280;
516 cursor: not-allowed;
517 }
518
519 /* Deactivate Label */
520 .formscrm-deactivate-label {
521 display: flex;
522 align-items: center;
523 gap: 8px;
524 padding: 12px 16px;
525 background: #fef2f2;
526 border: 1px solid #fecaca;
527 border-radius: 8px;
528 cursor: pointer;
529 transition: background 0.2s;
530 white-space: nowrap;
531 }
532
533 .formscrm-deactivate-label:hover {
534 background: #fee2e2;
535 }
536
537 .formscrm-deactivate-label input {
538 margin: 0;
539 }
540
541 .formscrm-deactivate-label span {
542 font-size: 0.875rem;
543 font-weight: 600;
544 color: #dc2626;
545 }
546
547 /* Help Text */
548 .formscrm-help-text {
549 margin: 8px 0 0 0;
550 font-size: 0.75rem;
551 color: #9ca3af;
552 }
553
554 /* Status Box */
555 .formscrm-status-box {
556 display: flex;
557 align-items: center;
558 gap: 12px;
559 padding: 14px 18px;
560 border-radius: 8px;
561 border: 2px solid;
562 }
563
564 .formscrm-status-active {
565 background: #dcfce7;
566 border-color: #86efac;
567 color: #166534;
568 }
569
570 .formscrm-status-expired {
571 background: #fee2e2;
572 border-color: #fca5a5;
573 color: #991b1b;
574 }
575
576 .formscrm-status-inactive {
577 background: #fef9c3;
578 border-color: #fde047;
579 color: #854d0e;
580 }
581
582 .formscrm-status-icon {
583 display: flex;
584 flex-shrink: 0;
585 }
586
587 .formscrm-icon,
588 .fcod-icon {
589 width: 22px;
590 height: 22px;
591 }
592
593 .formscrm-status-text {
594 font-weight: 700;
595 font-size: 1rem;
596 }
597
598 /* Notices */
599 .formscrm-notice {
600 padding: 14px 18px;
601 border-radius: 8px;
602 margin-bottom: 20px;
603 }
604
605 .formscrm-notice p {
606 margin: 0;
607 font-size: 0.875rem;
608 line-height: 1.5;
609 }
610
611 .formscrm-notice a {
612 font-weight: 600;
613 text-decoration: underline;
614 }
615
616 .formscrm-notice-info {
617 background: #f0f9ff;
618 border: 1px solid #bfdbfe;
619 color: #1e40af;
620 }
621
622 .formscrm-notice-info a {
623 color: #1d4ed8;
624 }
625
626 .formscrm-notice-error {
627 background: #fef2f2;
628 border: 1px solid #fecaca;
629 color: #991b1b;
630 }
631
632 .formscrm-notice-error a {
633 color: #dc2626;
634 }
635
636 /* Form Actions */
637 .formscrm-form-actions {
638 margin-top: 24px;
639 padding-top: 24px;
640 border-top: 1px solid #e5e7eb;
641 }
642
643 /* Buttons - FrontBlocks Purple Style */
644 .formscrm-button {
645 display: inline-flex;
646 align-items: center;
647 padding: 12px 24px;
648 border-radius: 8px;
649 font-size: 1rem;
650 font-weight: 600;
651 cursor: pointer;
652 transition: all 0.2s;
653 border: none;
654 }
655
656 .formscrm-button-primary {
657 background: #8b5cf6;
658 color: #fff;
659 }
660
661 .formscrm-button-primary:hover {
662 background: #7c3aed;
663 box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
664 }
665
666 /* Info Card (Sidebar) */
667 .formscrm-info-card {
668 background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
669 border: 1px solid #e2e8f0;
670 border-radius: 12px;
671 padding: 24px;
672 height: fit-content;
673 }
674
675 .formscrm-info-card h3 {
676 margin: 0 0 12px 0;
677 font-size: 1.125rem;
678 font-weight: 700;
679 color: #1e293b;
680 }
681
682 .formscrm-info-card p {
683 margin: 0 0 16px 0;
684 font-size: 0.875rem;
685 color: #64748b;
686 line-height: 1.5;
687 }
688
689 /* Benefits List */
690 .formscrm-benefits-list {
691 margin: 0;
692 padding: 0;
693 list-style: none;
694 }
695
696 .formscrm-benefits-list li {
697 position: relative;
698 padding-left: 28px;
699 margin-bottom: 10px;
700 font-size: 0.875rem;
701 color: #475569;
702 }
703
704 .formscrm-benefits-list li::before {
705 content: "";
706 position: absolute;
707 left: 0;
708 top: 0;
709 color: #8b5cf6;
710 font-weight: 700;
711 font-size: 1.125rem;
712 }
713
714 /* Responsive adjustments */
715 @media (max-width: 640px) {
716 .frbl-settings-wrapper {
717 margin-left: 0;
718 }
719
720 .frbl-settings-wrapper .tw-flex.tw-items-center.tw-justify-between {
721 @apply tw-flex-col tw-items-start tw-space-y-4;
722 }
723 }
724
725