PluginProbe
Easy Invoice – Invoice Generator, PDF Quotes & Payments / trunk
Easy Invoice – Invoice Generator, PDF Quotes & Payments vtrunk
2.3.8 2.3.7 2.3.6 2.3.5 2.3.4 2.3.3 2.3.2 2.3.1 2.2.0 2.1.21 2.1.20 2.1.19 2.1.18 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.16 2.1.2 2.1.3 2.1.4 All 55 releases
easy-invoice / assets / css / easy-invoice.css

easy-invoice.css in Easy Invoice – Invoice Generator, PDF Quotes & Payments trunk, at assets/css/easy-invoice.css

1,055 lines 22.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* Custom styles for Easy Invoice */
2
3 /* Utility classes */
4 .hidden {
5 display: none !important;
6 }
7
8 /* Custom select field styling */
9 select {
10 -webkit-appearance: none;
11 -moz-appearance: none;
12 appearance: none;
13 background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
14 background-position: right 0.75rem center;
15 background-repeat: no-repeat;
16 background-size: 1.5em 1.5em;
17 }
18
19 /* Ensure the custom arrow works in all browsers */
20 select::-ms-expand {
21 display: none;
22 }
23
24 /* Focus state for select fields */
25 select:focus {
26 background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%234f46e5' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
27 background-repeat: no-repeat;
28 background-position:right;
29 }
30
31 /* Specific styling for select fields with pr-10 class (which already has right padding) */
32 select.pr-10 {
33 background-position: right 0.75rem center;
34 }
35
36 /* Smooth transitions */
37 body
38 .invoice-item {
39 transition: all 0.2s ease-in-out;
40 }
41
42 .invoice-item:hover {
43 transform: translateY(-1px);
44 box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
45 }
46
47 /* Custom scrollbar */
48 ::-webkit-scrollbar {
49 width: 8px;
50 height: 8px;
51 }
52
53 ::-webkit-scrollbar-track {
54 background: #f1f1f1;
55 border-radius: 4px;
56 }
57
58 ::-webkit-scrollbar-thumb {
59 background: #c1c1c1;
60 border-radius: 4px;
61 }
62
63 ::-webkit-scrollbar-thumb:hover {
64 background: #a8a8a8;
65 }
66
67 /* Print styles */
68 @media print {
69 body {
70 background: white;
71 }
72
73 .no-print {
74 display: none !important;
75 }
76
77 .print-only {
78 display: block !important;
79 }
80
81 .invoice-preview {
82 box-shadow: none;
83 border: none;
84 }
85 }
86
87 /* Reset earlier preview tweaks */
88 .invoice-preview, .quote-preview { overflow-x: visible; }
89 .invoice-preview .invoice-items, .quote-preview .quote-items,
90 .invoice-preview table, .quote-preview table { width: auto; table-layout: auto; }
91 .invoice-preview .invoice-items th, .invoice-preview .invoice-items td,
92 .quote-preview .quote-items th, .quote-preview .quote-items td { white-space: inherit; word-break: normal; overflow-wrap: normal; }
93
94 /* Show horizontal scroll when the inner template overflows */
95 #invoice-container .template, #quote-container .template,
96 #invoice-container .template-modern, #quote-container .template-modern,
97 #invoice-container .template-minimal, #quote-container .template-minimal,
98 #invoice-container .template-standard, #quote-container .template-standard {
99 overflow-x: auto;
100 }
101
102 /* Animation for status badges */
103 .status-badge {
104 animation: fadeIn 0.3s ease-in-out;
105 }
106
107 @keyframes fadeIn {
108 from {
109 opacity: 0;
110 transform: translateY(-10px);
111 }
112 to {
113 opacity: 1;
114 transform: translateY(0);
115 }
116 }
117
118 /* Loading spinner */
119 .loading-spinner {
120 display: inline-block;
121 width: 1.5rem;
122 height: 1.5rem;
123 border: 3px solid rgba(0, 0, 0, 0.1);
124 border-radius: 50%;
125 border-top-color: #6366f1;
126 animation: spin 1s ease-in-out infinite;
127 }
128
129 @keyframes spin {
130 to {
131 transform: rotate(360deg);
132 }
133 }
134
135 /* Tooltip styles */
136 .tooltip {
137 position: relative;
138 display: inline-block;
139 }
140
141 .tooltip .tooltip-text {
142 visibility: hidden;
143 background-color: #333;
144 color: #fff;
145 text-align: center;
146 border-radius: 6px;
147 padding: 5px;
148 position: absolute;
149 z-index: 1;
150 bottom: 125%;
151 left: 50%;
152 transform: translateX(-50%);
153 opacity: 0;
154 transition: opacity 0.3s, visibility 0.3s;
155 }
156
157 .tooltip:hover .tooltip-text {
158 visibility: visible;
159 opacity: 1;
160 }
161
162 /* Responsive adjustments */
163 @media (max-width: 640px) {
164 .invoice-item {
165 padding: 1rem;
166 }
167
168 .invoice-item .grid {
169 gap: 1rem;
170 }
171
172 .invoice-preview {
173 padding: 1rem;
174 }
175 }
176
177 /* Custom button styles */
178 .btn-primary {
179 background-color: #6366f1;
180 color: white;
181 padding: 0.5rem 1rem;
182 border-radius: 0.375rem;
183 font-weight: 500;
184 transition: all 0.2s;
185 }
186
187 .btn-primary:hover {
188 background-color: #4f46e5;
189 transform: translateY(-1px);
190 }
191
192 .btn-secondary {
193 background-color: #f3f4f6;
194 color: #374151;
195 padding: 0.5rem 1rem;
196 border-radius: 0.375rem;
197 font-weight: 500;
198 transition: all 0.2s;
199 }
200
201 .btn-secondary:hover {
202 background-color: #e5e7eb;
203 transform: translateY(-1px);
204 }
205
206 /* Custom table styles */
207 .custom-table {
208 width: 100%;
209 border-collapse: separate;
210 border-spacing: 0;
211 }
212
213 .custom-table th {
214 background-color: #f9fafb;
215 padding: 0.75rem 1rem;
216 text-align: left;
217 font-weight: 500;
218 color: #6b7280;
219 }
220
221 .custom-table td {
222 padding: 0.75rem 1rem;
223 border-bottom: 1px solid #e5e7eb;
224 }
225
226 .custom-table tr:last-child td {
227 border-bottom: none;
228 }
229
230 /* Custom alert styles */
231 .alert {
232 padding: 1rem;
233 border-radius: 0.375rem;
234 margin-bottom: 1rem;
235 }
236
237 .alert-success {
238 background-color: #d1fae5;
239 color: #065f46;
240 border: 1px solid #a7f3d0;
241 }
242
243 .alert-error {
244 background-color: #fee2e2;
245 color: #b91c1c;
246 border: 1px solid #fecaca;
247 }
248
249 .alert-warning {
250 background-color: #fef3c7;
251 color: #92400e;
252 border: 1px solid #fde68a;
253 }
254
255 .alert-info {
256 background-color: #dbeafe;
257 color: #1e40af;
258 border: 1px solid #bfdbfe;
259 }
260
261 /* Notification system */
262 .notification-container {
263 position: fixed;
264 top: 1rem;
265 right: 1rem;
266 z-index: 9999;
267 max-width: 24rem;
268 }
269
270 .notification {
271 background-color: white;
272 border-radius: 0.375rem;
273 box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
274 padding: 1rem;
275 margin-bottom: 1rem;
276 display: flex;
277 align-items: center;
278 justify-content: space-between;
279 transition: all 0.3s ease;
280 transform: translateX(100%);
281 }
282
283 .notification.translate-x-0 {
284 transform: translateX(0);
285 }
286
287 .notification.translate-x-full {
288 transform: translateX(100%);
289 }
290
291 .notification.opacity-0 {
292 opacity: 0;
293 }
294
295 .notification-icon {
296 margin-right: 0.75rem;
297 }
298
299 .notification-message {
300 font-weight: 500;
301 }
302
303 .notification-close {
304 margin-left: 1rem;
305 color: #9CA3AF;
306 cursor: pointer;
307 }
308
309 .notification-close:hover {
310 color: #6B7280;
311 }
312
313 /* Success notification */
314 .notification.bg-green-50 {
315 background-color: #F0FDF4;
316 color: #166534;
317 }
318
319 .notification.bg-green-50 .notification-icon {
320 color: #4ADE80;
321 }
322
323 /* Error notification */
324 .notification.bg-red-50 {
325 background-color: #FEF2F2;
326 color: #B91C1C;
327 }
328
329 .notification.bg-red-50 .notification-icon {
330 color: #F87171;
331 }
332
333 /* Loading overlay */
334 #loading-overlay {
335 position: fixed;
336 top: 0;
337 left: 0;
338 right: 0;
339 bottom: 0;
340 background-color: rgba(17, 24, 39, 0.5);
341 display: flex;
342 align-items: center;
343 justify-content: center;
344 z-index: 9999;
345 }
346
347 #loading-overlay > div {
348 background-color: white;
349 border-radius: 0.5rem;
350 padding: 1.5rem;
351 text-align: center;
352 }
353
354 #loading-overlay .animate-spin {
355 display: inline-block;
356 height: 3rem;
357 width: 3rem;
358 border-radius: 50%;
359 border: 2px solid #E5E7EB;
360 border-top-color: #4F46E5;
361 animation: spin 1s linear infinite;
362 }
363
364 @keyframes spin {
365 to {
366 transform: rotate(360deg);
367 }
368 }
369
370 #loading-overlay p {
371 margin-top: 1rem;
372 color: #6B7280;
373 }
374
375 /* Invoice item collapse styles */
376 .invoice-item.collapsed-item {
377 padding: 8px !important;
378 margin-bottom: 8px !important;
379 border: 1px solid #e5e7eb !important;
380 border-radius: 0.375rem;
381 background-color: #f9fafb;
382 transition: all 0.2s ease;
383 }
384
385 .invoice-item.collapsed-item .flex.items-center.justify-between {
386 margin-bottom: 0 !important;
387 padding-bottom: 0 !important;
388 border-bottom: none !important;
389 }
390
391 .invoice-item.collapsed-item .item-collapsed-summary {
392 display: inline-flex !important;
393 align-items: center;
394 font-size: 0.875rem;
395 color: #6b7280;
396 }
397
398 .item-content {
399 transition: all 0.3s ease-in-out;
400 }
401
402 body.toplevel_page_easy-invoice-all #wpcontent {
403 padding-left: 0;
404 }
405
406 #wpbody-content {
407 display: flex;
408 flex-direction: column;
409 /* Was `height: 100vh` — that pinned the container to exactly the
410 viewport and clipped any page longer than the viewport. Using
411 `min-height: 100vh` instead lets the column grow when content
412 overflows, while still giving short pages a full-viewport base
413 so .easy-invoice-admin (with `flex: 1` below in main-template.php)
414 fills the page background to the bottom edge. */
415 min-height: 100vh;
416 }
417
418 .invoice-item.collapsed-item .item-content {
419 display: none;
420 }
421
422 /*
423 ==============================================
424 Custom Admin Menu Styles for Easy Invoice
425 ==============================================
426 */
427
428 /* General menu container styles */
429 #adminmenuback,
430 #adminmenuwrap,
431 #adminmenu {
432 background-color: #ffffff; /* Clean white background */
433 border-right: 1px solid #e5e7eb;
434 }
435
436 /* Top-level menu items */
437 #adminmenu a.menu-top {
438 font-size: 14px;
439 font-weight: 500;
440 color: #374151; /* Dark gray text */
441 padding: 12px 10px;
442 transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
443 border-left: 3px solid transparent;
444 }
445
446 /* Icons styling */
447 #adminmenu .wp-menu-image {
448 color: #6b7280;
449 transition: color 0.2s ease-in-out;
450 }
451
452 /* Hover state for top-level items */
453 #adminmenu li.menu-top:hover,
454 #adminmenu li.menu-top > a:focus {
455 background-color: #f9fafb;
456 color: #111827;
457 }
458
459 #adminmenu li.menu-top:hover > a {
460 border-left-color: #d1d5db; /* Gray border on hover */
461 }
462
463 /* Active/current top-level item */
464 #adminmenu li.wp-has-current-submenu > a.wp-has-current-submenu,
465 #adminmenu li.wp-has-current-submenu > a.wp-has-current-submenu:focus {
466 background-color: #f3f4f6; /* Light gray for the parent of an active submenu item */
467 color: #111827;
468 border-left-color: #4f46e5; /* Indigo border for active section */
469 }
470
471 #adminmenu li.wp-has-current-submenu > a .wp-menu-image,
472 #adminmenu li.current > a .wp-menu-image {
473 color: #4f46e5; /* Indigo icon for active item */
474 }
475
476 /* Submenu styles */
477 #adminmenu .wp-submenu {
478 background-color: #f9fafb; /* Slightly off-white for submenu */
479 padding: 8px 0;
480 }
481
482 #adminmenu .wp-submenu a {
483 color: #4b5563;
484 padding: 8px 16px 8px 36px;
485 font-size: 13px;
486 border-left: 3px solid transparent;
487 }
488
489 #adminmenu .wp-submenu a:hover {
490 background-color: #f3f4f6;
491 color: #111827;
492 border-left-color: #d1d5db;
493 }
494
495 /* Active/current submenu item */
496 #adminmenu .wp-submenu li.current a,
497 #adminmenu .wp-submenu li.current a:hover {
498 color: #4f46e5;
499 font-weight: 600;
500 border-left-color: #4f46e5;
501 }
502
503 /* Remove default separator lines */
504 #adminmenu li.wp-menu-separator {
505 display: none;
506 }
507
508 /* Adjust the collapse button */
509 #collapse-menu {
510 color: #6b7280;
511 }
512
513 #collapse-menu:hover {
514 color: #111827;
515 }
516
517 /* --- Payment Gateways Section: Minimal Modern Redesign (2024-06) --- */
518 .section-heading {
519 display: flex;
520 align-items: center;
521 margin-bottom: 1.5rem;
522 font-size: 1.15rem;
523 font-weight: 600;
524 color: #22223b;
525 }
526 .section-heading .gateway-icon {
527 width: 1.5rem;
528 height: 1.5rem;
529 margin-right: 0.5rem;
530 }
531
532 .info-box, .status-box {
533 display: flex;
534 align-items: flex-start;
535 border-radius: 1rem;
536 padding: 1.5rem;
537 margin-bottom: 1.5rem;
538 font-size: 0.98rem;
539 background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
540 border: 1px solid #e2e8f0;
541 color: #22223b;
542 box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
543 position: relative;
544 overflow: hidden;
545 }
546 .info-box::before {
547 content: '';
548 position: absolute;
549 top: 0;
550 left: 0;
551 right: 0;
552 height: 3px;
553 background: linear-gradient(90deg, #3b82f6, #6366f1, #8b5cf6);
554 }
555 .info-box .info-icon-wrapper {
556 display: flex;
557 align-items: center;
558 justify-content: center;
559 width: 3rem;
560 height: 3rem;
561 background: linear-gradient(135deg, #3b82f6, #6366f1);
562 border-radius: 0.75rem;
563 margin-right: 1.25rem;
564 flex-shrink: 0;
565 box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3);
566 }
567 .info-box .info-icon {
568 width: 1.5rem;
569 height: 1.5rem;
570 color: #ffffff;
571 stroke-width: 2.5;
572 }
573 .info-content {
574 flex: 1;
575 display: flex;
576 flex-direction: column;
577 gap: 0.5rem;
578 }
579 .info-header {
580 font-size: 1.1rem;
581 font-weight: 600;
582 color: #1e293b;
583 margin-bottom: 0.25rem;
584 }
585 .info-main {
586 font-weight: 500;
587 color: #374151;
588 line-height: 1.6;
589 font-size: 1rem;
590 }
591 .info-secondary {
592 font-size: 0.95em;
593 color: #6b7280;
594 line-height: 1.5;
595 font-style: italic;
596 padding-left: 0.5rem;
597 border-left: 3px solid #e5e7eb;
598 }
599 .status-box .gateway-icon {
600 width: 1.5rem;
601 height: 1.5rem;
602 margin-right: 1rem;
603 flex-shrink: 0;
604 }
605 .status-content {
606 flex: 1;
607 }
608 .status-box .main {
609 font-weight: 500;
610 color: #22223b;
611 line-height: 1.5;
612 }
613 .status-box .secondary {
614 font-size: 0.95em;
615 color: #64748b;
616 line-height: 1.4;
617 margin-top: 0.25rem;
618 }
619 .status-box .main {
620 color: #059669;
621 }
622 .status-box .secondary {
623 color: #059669;
624 }
625
626 .no-gateways-notice {
627 padding: 1.25rem 1.5rem;
628 background: #fef2f2;
629 border: 1px solid #fecaca;
630 border-radius: 0.75rem;
631 color: #dc2626;
632 font-size: 0.95rem;
633 font-style: italic;
634 text-align: center;
635 margin-bottom: 1.5rem;
636 }
637
638 .toggle-container {
639 background: #ffffff;
640 border: 1px solid #e2e8f0;
641 border-radius: 0.75rem;
642 padding: 1.25rem 1.5rem;
643 margin-bottom: 1.5rem;
644 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
645 }
646 .toggle-row {
647 display: flex;
648 align-items: center;
649 cursor: pointer;
650 gap: 1rem;
651 }
652 .toggle-label {
653 font-size: 1rem;
654 font-weight: 500;
655 color: #22223b;
656 flex: 1;
657 }
658 .toggle-switch {
659 position: relative;
660 display: inline-block;
661 width: 3rem;
662 height: 1.5rem;
663 }
664 .toggle-checkbox {
665 opacity: 0;
666 width: 0;
667 height: 0;
668 position: absolute;
669 }
670 .toggle-slider {
671 position: absolute;
672 cursor: pointer;
673 top: 0;
674 left: 0;
675 right: 0;
676 bottom: 0;
677 background-color: #cbd5e1;
678 transition: 0.3s;
679 border-radius: 1.5rem;
680 box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
681 }
682 .toggle-slider:before {
683 position: absolute;
684 content: "";
685 height: 1.25rem;
686 width: 1.25rem;
687 left: 0.125rem;
688 bottom: 0.125rem;
689 background-color: white;
690 transition: 0.3s;
691 border-radius: 50%;
692 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
693 }
694 .toggle-checkbox:checked + .toggle-slider {
695 background-color: #6366f1;
696 }
697 .toggle-checkbox:checked + .toggle-slider:before {
698 transform: translateX(1.5rem);
699 }
700 .toggle-help {
701 display: inline-flex;
702 align-items: center;
703 justify-content: center;
704 width: 1.25rem;
705 height: 1.25rem;
706 background: #f1f5f9;
707 border: 1px solid #e2e8f0;
708 border-radius: 50%;
709 color: #64748b;
710 font-size: 0.75rem;
711 font-weight: 600;
712 cursor: help;
713 transition: all 0.2s;
714 }
715 .toggle-help:hover {
716 background: #e2e8f0;
717 color: #475569;
718 }
719
720 .toggle-description {
721 margin-top: 0.75rem;
722 padding: 0.75rem 1rem;
723 background: #f8fafc;
724 border: 1px solid #e2e8f0;
725 border-radius: 0.5rem;
726 font-size: 0.9rem;
727 color: #64748b;
728 line-height: 1.5;
729 border-left: 3px solid #6366f1;
730 }
731
732 .gateway-cards {
733 display: grid;
734 grid-template-columns: 1fr 1fr;
735 gap: 1rem;
736 margin-bottom: 1.5rem;
737 }
738 @media (max-width: 900px) {
739 .gateway-cards {
740 grid-template-columns: 1fr;
741 }
742 }
743 .gateway-card {
744 display: flex;
745 align-items: flex-start;
746 padding: 1.25rem 1rem;
747 border: 1px solid #e2e8f0;
748 border-radius: 0.75rem;
749 background: #fff;
750 cursor: pointer;
751 transition: all 0.2s ease;
752 min-height: 4rem;
753 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
754 position: relative;
755 gap: 1rem;
756 }
757 .gateway-card.checked {
758 border-color: #6366f1;
759 background: #f6f8ff;
760 box-shadow: 0 2px 8px rgba(99, 102, 241, 0.15);
761 }
762 .gateway-card:hover {
763 border-color: #6366f1;
764 box-shadow: 0 2px 8px rgba(99, 102, 241, 0.1);
765 transform: translateY(-1px);
766 }
767 .gateway-card input[type="checkbox"] {
768 display: none;
769 }
770 .gateway-card .custom-checkbox {
771 width: 1.25rem;
772 height: 1.25rem;
773 border: 2px solid #cbd5e1;
774 border-radius: 0.375rem;
775 background: #fff;
776 display: flex;
777 align-items: center;
778 justify-content: center;
779 margin-right: 1rem;
780 margin-top: 0.125rem;
781 transition: all 0.2s ease;
782 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
783 }
784 .gateway-card.checked .custom-checkbox {
785 border-color: #6366f1;
786 background: #6366f1;
787 box-shadow: 0 2px 4px rgba(99, 102, 241, 0.3);
788 }
789 .gateway-card .custom-checkbox svg {
790 display: none;
791 width: 0.875rem;
792 height: 0.875rem;
793 color: #fff;
794 stroke-width: 2.5;
795 }
796 .gateway-card.checked .custom-checkbox svg {
797 display: block;
798 }
799 .gateway-card-content {
800 display: flex;
801 flex-direction: column;
802 justify-content: center;
803 gap: 0.25rem;
804 flex: 1;
805 }
806 .gateway-title {
807 font-weight: 600;
808 color: #22223b;
809 font-size: 1rem;
810 line-height: 1.3;
811 display: flex;
812 align-items: center;
813 gap: 0.5rem;
814 }
815 .gateway-desc {
816 font-size: 0.9em;
817 color: #64748b;
818 margin: 0;
819 font-weight: 400;
820 line-height: 1.4;
821 }
822 .gateway-icon-wrap, .gateway-icon { display: none !important; }
823
824 .badge {
825 padding: 0.25rem 0.5rem;
826 background: #fef3c7;
827 color: #b45309;
828 border-radius: 0.5rem;
829 font-size: 0.75em;
830 font-weight: 500;
831 border: 1px solid #fde68a;
832 }
833
834 /* License Status Badge */
835 .license-status-badge {
836 transition: all 0.2s ease;
837 font-size: 0.75rem;
838 font-weight: 500;
839 border-radius: 9999px;
840 padding: 0 0.5rem;
841 display: inline-flex;
842 align-items: center;
843 gap: 0.25rem;
844 }
845
846 .license-status-badge .status-dot {
847 width: 0.375rem;
848 height: 0.375rem;
849 border-radius: 50%;
850 background: currentColor;
851 opacity: 0.8;
852 }
853
854 .license-status-badge.active {
855 background: #dcfce7;
856 color: #166534;
857 border: 1px solid #bbf7d0;
858 }
859
860 .license-status-badge.activated {
861 background: #dcfce7;
862 color: #166534;
863 border: 1px solid #bbf7d0;
864 font-size: 0.625rem;
865 padding: 0.125rem 0.375rem;
866 }
867
868 .license-status-badge.inactive {
869 background: #fef2f2;
870 color: #dc2626;
871 border: 1px solid #fecaca;
872 }
873
874 .license-status-badge.deactivated {
875 background: #fef2f2;
876 color: #dc2626;
877 border: 1px solid #fecaca;
878 }
879
880 .license-status-badge.expired {
881 background: #fef3c7;
882 color: #92400e;
883 border: 1px solid #fde68a;
884 }
885
886 .license-status-badge.free {
887 background: #e0e7ff;
888 color: #3730a3;
889 border: 1px solid #c7d2fe;
890 }
891
892 /* License menu item badge */
893 .group:hover .license-status-badge {
894 transform: scale(1.05);
895 }
896
897 /* Responsive adjustments for license badge */
898 @media (max-width: 768px) {
899 .license-status-badge {
900 font-size: 0.625rem;
901 padding: 0.125rem 0.375rem;
902 }
903 }
904
905 /* Dashboard / settings: negative margins for full-bleed bar inside padded shell */
906 .easy-invoice-admin-page-header {
907 margin-left: -2rem;
908 margin-top: -2rem;
909 margin-right: -2rem;
910 padding-left: 2rem;
911 padding-right: 2rem;
912 }
913
914 /* All primary list/settings/dashboard headers: same strip height as sidebar + builder */
915 body.easy-invoice-admin-body .ei-app-page-header {
916 box-sizing: border-box;
917 height: var(--ei-app-header-strip-height, 6.5rem);
918 min-height: var(--ei-app-header-strip-height, 6.5rem);
919 max-height: var(--ei-app-header-strip-height, 6.5rem);
920 display: flex;
921 flex-direction: column;
922 justify-content: center;
923 overflow: hidden;
924 padding-top: 0;
925 padding-bottom: 0;
926 }
927
928 body.easy-invoice-admin-body .ei-app-page-header > div {
929 width: 100%;
930 min-height: 0;
931 flex: 0 1 auto;
932 display: flex;
933 align-items: center;
934 justify-content: space-between;
935 gap: 1rem;
936 }
937
938 body.easy-invoice-admin-body .ei-app-page-header h1 {
939 font-size: 1.25rem;
940 line-height: 1.3;
941 font-weight: 700;
942 }
943
944 body.easy-invoice-admin-body .ei-app-page-header p.text-sm,
945 body.easy-invoice-admin-body .ei-app-page-header .text-sm.text-gray-500 {
946 margin-top: 0.125rem;
947 font-size: 0.75rem;
948 line-height: 1.25;
949 }
950
951 .easy-invoice-chart-wrap {
952 height: 300px;
953 position: relative;
954 }
955
956 .easy-invoice-chart-canvas {
957 width: 100% !important;
958 height: 100% !important;
959 }
960
961 /* Accessibility: skip link */
962 .easy-invoice-admin .screen-reader-text {
963 border: 0;
964 clip: rect(1px, 1px, 1px, 1px);
965 clip-path: inset(50%);
966 height: 1px;
967 margin: -1px;
968 overflow: hidden;
969 padding: 0;
970 position: absolute !important;
971 width: 1px;
972 word-wrap: normal !important;
973 }
974
975 .easy-invoice-admin .easy-invoice-skip-link:focus {
976 background: #fff;
977 border-radius: 0.375rem;
978 box-shadow: 0 0 0 2px #4f46e5, 0 4px 6px -1px rgba(0, 0, 0, 0.1);
979 clip: auto !important;
980 clip-path: none;
981 color: #1f2937;
982 display: block;
983 font-size: 0.875rem;
984 font-weight: 600;
985 height: auto;
986 left: 1rem;
987 line-height: 1.25;
988 padding: 0.75rem 1rem;
989 text-decoration: none;
990 top: 1rem;
991 width: auto;
992 z-index: 100000;
993 }
994
995 .easy-invoice-admin nav a:focus-visible {
996 outline: 2px solid #4f46e5;
997 outline-offset: 2px;
998 }
999
1000 /*
1001 * Sidebar branding strip + builder top bar: one shared height so the bottom borders line up.
1002 * Variable is on body (sidebar sits outside .easy-invoice-admin, so do not scope only there).
1003 * Uses px-friendly rem; max-height + overflow keep Pro toolbar from growing the bar.
1004 */
1005 body.easy-invoice-admin-body {
1006 /* Shared by sidebar branding, builder bar, and list/dashboard page headers */
1007 --ei-app-header-strip-height: 6.5rem;
1008 }
1009
1010 body.easy-invoice-admin-body .ei-app-sidebar-top {
1011 box-sizing: border-box;
1012 flex-shrink: 0;
1013 height: var(--ei-app-header-strip-height);
1014 min-height: var(--ei-app-header-strip-height);
1015 max-height: var(--ei-app-header-strip-height);
1016 overflow: hidden;
1017 }
1018
1019 @media (min-width: 1024px) {
1020 body.easy-invoice-admin-body .ei-invoice-builder-header.ei-app-header-sync,
1021 body.easy-invoice-admin-body .ei-quote-builder-header.ei-app-header-sync {
1022 box-sizing: border-box;
1023 flex-shrink: 0;
1024 height: var(--ei-app-header-strip-height);
1025 min-height: var(--ei-app-header-strip-height);
1026 max-height: var(--ei-app-header-strip-height);
1027 /* Allow dropdowns/popovers (e.g. Pro deposit info) to extend below the strip; clip tall content on the title column instead (.ei-app-header-leading). */
1028 overflow: visible;
1029 }
1030
1031 body.easy-invoice-admin-body .ei-app-header-sync .ei-app-header-leading {
1032 min-height: 0;
1033 min-width: 0;
1034 overflow: hidden;
1035 }
1036
1037 body.easy-invoice-admin-body .ei-app-header-sync > .max-w-full {
1038 display: flex;
1039 align-items: center;
1040 height: 100%;
1041 min-height: 0;
1042 }
1043
1044 body.easy-invoice-admin-body .ei-app-header-sync .ei-app-header-inner {
1045 align-items: center;
1046 width: 100%;
1047 min-height: 0;
1048 }
1049
1050 body.easy-invoice-admin-body .ei-app-header-sync .ei-builder-header-actions,
1051 body.easy-invoice-admin-body .ei-app-header-sync .ei-builder-header-actions > * {
1052 max-height: 100%;
1053 }
1054 }
1055