PluginProbe
ThinkRank AI SEO – AI SEO Plugin for WordPress: Schema, XML Sitemaps, Meta Tags, Search Console & Local SEO / 1.0.0
ThinkRank AI SEO – AI SEO Plugin for WordPress: Schema, XML Sitemaps, Meta Tags, Search Console & Local SEO v1.0.0
2.7.0 2.6.0 2.5.0 2.4.0 2.3.0 2.2.0 2.1.1 2.1.0 2.0.2 2.0.1 2.0.0 1.32.0 1.31.0 1.30.0 1.29.0 1.28.0 1.27.0 1.26.0 1.25.0 trunk 1.0.0 1.0.1 1.0.2 1.1.0 1.10.0 All 48 releases
thinkrank / src / shared / styles / components / seo-score.scss

seo-score.scss in ThinkRank AI SEO – AI SEO Plugin for WordPress: Schema, XML Sitemaps, Meta Tags, Search Console & Local SEO 1.0.0, at src/shared/styles/components/seo-score.scss

959 lines 27.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * SEO Score Calculator Styles
3 *
4 * Styles for the comprehensive SEO scoring system
5 * Shared between admin and metabox contexts
6 *
7 * @package ThinkRank
8 * @since 1.0.0
9 */
10
11 @use '../variables' as *;
12 @use '../mixins' as *;
13
14 /* Main Calculator Container */
15 .thinkrank-seo-score-calculator {
16 .calculator-header {
17 margin-bottom: 20px;
18 background: #f9f9f9;
19 border-radius: 8px;
20 padding: 10px 20px;
21
22 .header-content {
23 display: flex;
24 justify-content: space-between;
25 align-items: center;
26 margin-bottom: 10px;
27
28 h3 {
29 margin: 0;
30 font-size: 18px;
31 font-weight: 600;
32 }
33 }
34
35 .last-calculated {
36 font-size: 12px;
37 color: #666;
38 font-style: italic;
39 }
40 }
41
42 .calculating-state {
43 text-align: center;
44 padding: 40px 20px;
45
46 .components-spinner {
47 margin-bottom: 15px;
48 }
49
50 p {
51 color: #666;
52 margin: 0;
53 }
54 }
55
56 .empty-state {
57 text-align: center;
58 padding: 60px 20px;
59
60 .empty-state-content {
61 max-width: 400px;
62 margin: 0 auto;
63
64 .empty-state-icon {
65 font-size: 48px;
66 margin-bottom: 20px;
67 }
68
69 h4 {
70 margin: 0 0 10px 0;
71 font-size: 18px;
72 color: #1e1e1e;
73 }
74
75 p {
76 color: #666;
77 line-height: 1.5;
78 margin: 0;
79 }
80 }
81 }
82 }
83
84 /* Score Breakdown Component */
85 .thinkrank-score-breakdown {
86 .score-overview-card {
87 margin-bottom: 20px;
88
89 .overall-score-display {
90 display: flex;
91 align-items: center;
92 gap: 20px;
93
94 .score-circle {
95 width: 80px;
96 height: 80px;
97 border-radius: 50%;
98 display: flex;
99 flex-direction: column;
100 align-items: center;
101 justify-content: center;
102 font-weight: bold;
103 position: relative;
104
105 &.score-excellent {
106 background: linear-gradient(135deg, #10b981, #059669);
107 color: white;
108 }
109
110 &.score-good {
111 background: linear-gradient(135deg, #3b82f6, #1d4ed8);
112 color: white;
113 }
114
115 &.score-fair {
116 background: linear-gradient(135deg, #f59e0b, #d97706);
117 color: white;
118 }
119
120 &.score-poor {
121 background: linear-gradient(135deg, #ef4444, #dc2626);
122 color: white;
123 }
124
125 .score-number {
126 font-size: 24px;
127 line-height: 1;
128 }
129
130 .score-grade {
131 font-size: 12px;
132 opacity: 0.9;
133 }
134 }
135
136 .score-info {
137 flex: 1;
138
139 .score-description {
140 font-size: 16px;
141 font-weight: 500;
142 margin: 0 0 5px 0;
143 color: #1e1e1e;
144 }
145
146 .score-timestamp {
147 font-size: 12px;
148 color: #666;
149 margin: 0;
150 }
151 }
152 }
153 }
154
155 .score-factors-card {
156 .score-factors-list {
157 .score-factor-item {
158 border: 1px solid #e5e7eb;
159 border-radius: 8px;
160 margin-bottom: 12px;
161 overflow: hidden;
162
163 .factor-header {
164 padding: 16px;
165 cursor: pointer;
166 transition: background-color 0.2s;
167
168 &:hover {
169 background-color: #f9fafb;
170 }
171
172 // WordPress Flex component alignment
173 .components-flex {
174 width: 100%;
175 align-items: center;
176
177 // First item (factor info) - takes available space
178 .components-flex-item:first-child {
179 flex: 1;
180 }
181
182 // Second item (score container) - fixed width, right aligned
183 .components-flex-item.factor-score-container {
184 flex: 0 0 auto;
185 min-width: 80px;
186 text-align: right;
187 }
188
189 // Third item (button) - fixed width
190 .components-flex-item:last-child {
191 flex: 0 0 auto;
192 margin-left: 8px;
193 }
194 }
195
196 .factor-info {
197 display: flex;
198 align-items: center;
199 gap: 12px;
200 flex: 1;
201
202 .factor-icon {
203 font-size: 20px;
204 }
205
206 .factor-text {
207 .factor-label {
208 display: block;
209 font-weight: 500;
210 color: #1e1e1e;
211 margin-bottom: 2px;
212 }
213
214 .factor-description {
215 display: block;
216 font-size: 12px;
217 color: #666;
218 }
219 }
220 }
221
222 .factor-score {
223 text-align: right;
224
225 .score-value {
226 display: block;
227 font-weight: 600;
228 margin-bottom: 4px;
229 color: #1e1e1e;
230 }
231
232 .score-bar {
233 width: 100px;
234 height: 6px;
235 background-color: #e5e7eb;
236 border-radius: 3px;
237 overflow: hidden;
238
239 .score-bar-fill {
240 height: 100%;
241 transition: width 0.3s ease;
242
243 &.score-excellent {
244 background-color: #10b981;
245 }
246
247 &.score-good {
248 background-color: #3b82f6;
249 }
250
251 &.score-fair {
252 background-color: #f59e0b;
253 }
254
255 &.score-poor {
256 background-color: #ef4444;
257 }
258 }
259 }
260 }
261 }
262
263 .factor-details {
264 padding: 16px;
265 background-color: #f9fafb;
266 border-top: 1px solid #e5e7eb;
267
268 .factor-suggestions {
269 margin-bottom: 16px;
270
271 h5 {
272 margin: 0 0 8px 0;
273 font-size: 14px;
274 font-weight: 600;
275 color: #1e1e1e;
276 }
277
278 ul {
279 margin: 0;
280 padding-left: 20px;
281
282 li {
283 margin-bottom: 4px;
284 color: #374151;
285 font-size: 14px;
286 }
287 }
288 }
289
290 .factor-technical-details {
291 margin-top: 16px;
292 padding: 12px;
293 background: #f8f9fa;
294 border-radius: 4px;
295 border-left: 3px solid #007cba;
296
297 h5 {
298 margin: 0 0 8px 0;
299 font-size: 13px;
300 font-weight: 600;
301 color: #1e1e1e;
302 }
303
304 .details-list {
305 .detail-item {
306 display: flex;
307 align-items: center;
308 padding: 6px 0;
309 font-size: 13px;
310 color: #374151;
311
312 &:before {
313 content: "";
314 width: 4px;
315 height: 4px;
316 background: #007cba;
317 border-radius: 50%;
318 margin-right: 8px;
319 flex-shrink: 0;
320 }
321
322 &:not(:last-child) {
323 margin-bottom: 2px;
324 }
325 }
326 }
327 }
328 }
329 }
330 }
331 }
332 }
333
334 /* Improvement Suggestions Component */
335 .improvement-suggestions-card {
336 margin-bottom: 20px;
337 .suggestions-header {
338 display: flex;
339 align-items: center;
340 gap: 8px;
341
342 .suggestions-icon {
343 font-size: 20px;
344 }
345
346 h4 {
347 margin: 0;
348 font-size: 16px;
349 font-weight: 600;
350 }
351 }
352
353 .suggestions-count {
354 font-size: 12px;
355 color: #666;
356 background-color: #f3f4f6;
357 padding: 4px 8px;
358 border-radius: 12px;
359 }
360
361 .no-suggestions {
362 text-align: center;
363 padding: 40px 20px;
364
365 .success-icon {
366 font-size: 48px;
367 margin-bottom: 16px;
368 }
369
370 h4 {
371 margin: 0 0 8px 0;
372 color: #10b981;
373 font-size: 18px;
374 }
375
376 p {
377 color: #666;
378 margin: 0;
379 }
380 }
381
382 .suggestions-list {
383 .priority-group {
384 margin-bottom: 24px;
385
386 .priority-header {
387 display: flex;
388 align-items: center;
389 gap: 8px;
390 margin: 0 0 12px 0;
391 font-size: 14px;
392 font-weight: 600;
393
394 .priority-icon {
395 font-size: 12px;
396 }
397
398 .priority-count {
399 font-size: 12px;
400 color: #666;
401 font-weight: normal;
402 }
403 }
404
405 &.priority-high .priority-header {
406 color: #dc2626;
407 }
408
409 &.priority-medium .priority-header {
410 color: #d97706;
411 }
412
413 &.priority-low .priority-header {
414 color: #059669;
415 }
416
417 .suggestions-in-group {
418 .suggestion-item {
419 border: 1px solid #e5e7eb;
420 border-radius: 8px;
421 margin-bottom: 8px;
422
423 &.priority-high {
424 border-left: 4px solid #dc2626;
425 }
426
427 &.priority-medium {
428 border-left: 4px solid #d97706;
429 }
430
431 &.priority-low {
432 border-left: 4px solid #059669;
433 }
434
435 .suggestion-content {
436 padding: 16px;
437 display: flex;
438 justify-content: space-between;
439 align-items: flex-start;
440 gap: 16px;
441
442 .suggestion-text {
443 flex: 1;
444 display: flex;
445 flex-direction: column;
446 gap: 8px;
447
448 .category-badge {
449 display: inline-block;
450 background-color: #f3f4f6;
451 color: #374151;
452 font-size: 10px;
453 font-weight: 500;
454 text-transform: uppercase;
455 padding: 2px 6px;
456 border-radius: 3px;
457 align-self: flex-start;
458 }
459
460 .suggestion-message {
461 font-size: 14px;
462 line-height: 1.5;
463 color: #374151;
464 }
465
466 .priority-badge {
467 display: inline-block;
468 font-size: 10px;
469 font-weight: 600;
470 text-transform: uppercase;
471 padding: 3px 8px;
472 border-radius: 12px;
473 align-self: flex-start;
474
475 &.priority-high {
476 background-color: #fef2f2;
477 color: #dc2626;
478 border: 1px solid #fecaca;
479 }
480
481 &.priority-medium {
482 background-color: #fffbeb;
483 color: #d97706;
484 border: 1px solid #fed7aa;
485 }
486
487 &.priority-low {
488 background-color: #f0fdf4;
489 color: #059669;
490 border: 1px solid #bbf7d0;
491 }
492 border-radius: 4px;
493 margin-right: 8px;
494 }
495 }
496
497 .suggestion-actions {
498 display: flex;
499 gap: 8px;
500 flex-shrink: 0;
501 }
502 }
503 }
504 }
505 }
506 }
507
508 .dismissed-suggestions-notice {
509 margin-top: 16px;
510 }
511 }
512
513 /* Responsive Design - Enhanced for restored functionality */
514 @media (max-width: 768px) {
515 .thinkrank-score-breakdown {
516 .score-overview-card {
517 .overall-score-display {
518 flex-direction: column;
519 text-align: center;
520 gap: 16px;
521 }
522 }
523
524 .score-factors-card {
525 .score-factors-list {
526 .score-factor-item {
527 .factor-header {
528 .factor-score {
529 min-width: auto;
530
531 .score-bar {
532 width: 80px;
533 }
534 }
535 }
536 }
537 }
538 }
539 }
540
541 .improvement-suggestions-card {
542 .suggestions-list {
543 .priority-group {
544 .suggestions-in-group {
545 .suggestion-item {
546 .suggestion-content {
547 flex-direction: column;
548 gap: 12px;
549
550 .suggestion-actions {
551 align-self: flex-end;
552 }
553 }
554 }
555 }
556 }
557 }
558 }
559
560 /* SEO Score Summary responsive design */
561 .seo-score-summary-card {
562 .analysis-section {
563 &.score-section {
564 flex-direction: column;
565 text-align: center;
566 gap: 20px;
567
568 .score-circle {
569 width: 100px;
570 height: 100px;
571
572 .score-number {
573 font-size: 28px;
574 }
575
576 .score-grade {
577 font-size: 16px;
578 }
579 }
580
581 .score-breakdown {
582 width: 100%;
583
584 .score-item {
585 flex-direction: column;
586 text-align: center;
587 gap: 8px;
588
589 .score-label {
590 font-size: 13px;
591 }
592
593 .score-value {
594 font-size: 13px;
595 }
596 }
597 }
598 }
599
600 &.content-analysis {
601 .analysis-grid {
602 grid-template-columns: 1fr;
603 gap: 12px;
604
605 .analysis-item {
606 flex-direction: column;
607 text-align: center;
608 gap: 6px;
609
610 .analysis-label {
611 font-size: 12px;
612 }
613
614 .analysis-value {
615 font-size: 12px;
616 }
617 }
618 }
619 }
620 }
621 }
622 }
623
624 @media (max-width: 480px) {
625 .seo-score-summary-card {
626 .analysis-section {
627 &.score-section {
628 padding: 16px;
629
630 .score-circle {
631 width: 80px;
632 height: 80px;
633
634 .score-number {
635 font-size: 24px;
636 }
637
638 .score-grade {
639 font-size: 14px;
640 }
641
642 .score-label {
643 font-size: 10px;
644 }
645 }
646 }
647
648 &.content-analysis {
649 padding: 16px;
650
651 h4 {
652 font-size: 14px;
653 }
654 }
655 }
656 }
657
658 .improvement-suggestions-card {
659 .suggestions-list {
660 .priority-group {
661 .suggestions-in-group {
662 .suggestion-item {
663 .suggestion-content {
664 .suggestion-text {
665 .suggestion-message {
666 font-size: 13px;
667 }
668
669 .priority-badge {
670 font-size: 9px;
671 padding: 2px 6px;
672 }
673 }
674 }
675 }
676 }
677 }
678 }
679 }
680 }
681
682 /* SEO Score Summary Component - Restored from jQuery implementation */
683 .seo-score-summary-card {
684 margin-bottom: 20px;
685
686 .analysis-section {
687 &.score-section {
688 display: flex;
689 align-items: center;
690 gap: 24px;
691 margin-bottom: 24px;
692 padding: 20px;
693 background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
694 border-radius: 12px;
695 border: 1px solid #e2e8f0;
696
697 .score-circle {
698 display: flex;
699 flex-direction: column;
700 align-items: center;
701 justify-content: center;
702 width: 120px;
703 height: 120px;
704 border-radius: 50%;
705 border: 4px solid;
706 background: white;
707 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
708 flex-shrink: 0;
709
710 .score-number {
711 font-size: 32px;
712 font-weight: 700;
713 line-height: 1;
714 margin-bottom: 4px;
715 }
716
717 .score-grade {
718 font-size: 18px;
719 font-weight: 600;
720 line-height: 1;
721 margin-bottom: 4px;
722 }
723
724 .score-label {
725 font-size: 12px;
726 font-weight: 500;
727 text-transform: uppercase;
728 letter-spacing: 0.5px;
729 opacity: 0.8;
730 }
731
732 &.score-high {
733 border-color: #10b981;
734 color: #10b981;
735 background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);
736 }
737
738 &.score-medium {
739 border-color: #f59e0b;
740 color: #f59e0b;
741 background: linear-gradient(135deg, #fffbeb 0%, #fef3c7 100%);
742 }
743
744 &.score-low {
745 border-color: #ef4444;
746 color: #ef4444;
747 background: linear-gradient(135deg, #fef2f2 0%, #fecaca 100%);
748 }
749 }
750
751 .score-breakdown {
752 flex: 1;
753 display: grid;
754 grid-template-columns: 1fr;
755 gap: 16px;
756
757 .score-item {
758 display: flex;
759 justify-content: space-between;
760 align-items: center;
761 padding: 12px 16px;
762 background: white;
763 border-radius: 8px;
764 border: 1px solid #e5e7eb;
765 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
766
767 .score-label {
768 font-weight: 600;
769 color: #374151;
770 font-size: 14px;
771 }
772
773 .score-value {
774 font-weight: 500;
775 color: #1f2937;
776 font-size: 14px;
777 padding: 4px 8px;
778 background: #f9fafb;
779 border-radius: 4px;
780 border: 1px solid #e5e7eb;
781 }
782 }
783 }
784 }
785
786 &.content-analysis {
787 padding: 20px;
788 background: #f9fafb;
789 border-radius: 8px;
790 border: 1px solid #e5e7eb;
791
792 h4 {
793 margin: 0 0 16px 0;
794 font-size: 16px;
795 font-weight: 600;
796 color: #1f2937;
797 display: flex;
798 align-items: center;
799 gap: 8px;
800
801 &:before {
802 content: '📊';
803 font-size: 18px;
804 }
805 }
806
807 .analysis-grid {
808 display: grid;
809 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
810 gap: 16px;
811
812 .analysis-item {
813 display: flex;
814 justify-content: space-between;
815 align-items: center;
816 padding: 12px 16px;
817 background: white;
818 border-radius: 6px;
819 border: 1px solid #e5e7eb;
820
821 .analysis-label {
822 font-weight: 500;
823 color: #6b7280;
824 font-size: 13px;
825 }
826
827 .analysis-value {
828 font-weight: 600;
829 color: #1f2937;
830 font-size: 13px;
831 }
832
833 .analysis-note {
834 display: block;
835 font-size: 11px;
836 color: #666;
837 margin-top: 2px;
838 font-style: italic;
839 }
840 }
841 }
842 }
843 }
844 }
845
846 /* SEO Results Tabs Styling */
847 .thinkrank-seo-results-tabs {
848 margin-top: 20px;
849
850 .components-tab-panel__tabs {
851 display: flex;
852 border-bottom: 1px solid #ddd;
853 margin-bottom: 20px;
854
855 .components-button {
856 border: none;
857 border-bottom: 2px solid transparent;
858 border-radius: 0;
859 padding: 12px 20px;
860 font-weight: 500;
861 color: #666;
862 background: none;
863 transition: all 0.2s ease;
864
865 &:hover {
866 color: #0073aa;
867 background-color: #f8f9fa;
868 }
869
870 &.is-active {
871 color: #0073aa;
872 border-bottom-color: #0073aa;
873 background-color: #fff;
874 }
875
876 .tab-title-with-badge {
877 display: flex;
878 align-items: center;
879 gap: 6px;
880
881 .suggestion-count-badge {
882 background-color: #dc3545;
883 color: white;
884 font-size: 11px;
885 font-weight: 600;
886 padding: 2px 6px;
887 border-radius: 10px;
888 min-width: 18px;
889 text-align: center;
890 line-height: 1.2;
891 }
892 }
893 }
894 }
895
896 .tab-content {
897 min-height: 300px;
898
899 .no-suggestions-message {
900 text-align: center;
901 padding: 60px 20px;
902
903 .success-icon {
904 font-size: 48px;
905 margin-bottom: 16px;
906 }
907
908 h4 {
909 margin: 0 0 8px 0;
910 color: #10b981;
911 font-size: 18px;
912 }
913
914 p {
915 color: #666;
916 margin: 0;
917 font-size: 14px;
918 }
919 }
920 }
921 }
922
923 /* Suggestion Modal Styling */
924 .thinkrank-suggestion-modal {
925 .modal-content {
926 margin-bottom: 20px;
927
928 .suggestion-quote {
929 background-color: #f8f9fa;
930 border-left: 4px solid #0073aa;
931 padding: 12px 16px;
932 margin: 12px 0;
933 font-style: italic;
934 color: #1e1e1e;
935 }
936
937 .guidance-section {
938 background-color: #e7f3ff;
939 border: 1px solid #b3d9ff;
940 border-radius: 6px;
941 padding: 12px;
942 margin: 12px 0;
943
944 p {
945 margin: 0;
946 color: #0073aa;
947 font-weight: 500;
948 }
949 }
950 }
951
952 .modal-actions {
953 display: flex;
954 gap: 12px;
955 justify-content: flex-end;
956 padding-top: 16px;
957 border-top: 1px solid #ddd;
958 }
959 }