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 / admin / styles / components / _analytics.scss

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

667 lines 15.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Analytics Component Styles
3 *
4 * Styles for SEO Analytics & Intelligence components
5 * Following ThinkRank design patterns and utility-first approach
6 *
7 * @package ThinkRank
8 * @since 1.0.0
9 */
10
11 // Import shared variables for access to design tokens
12 @use '../../../shared/styles/variables' as *;
13
14 /* ==========================================================================
15 ANALYTICS TAB LAYOUT
16 ========================================================================== */
17
18 .thinkrank-analytics-tab {
19 // Base layout styles are handled by SettingsCard component
20 }
21
22 /* ==========================================================================
23 METRIC CARDS & DISPLAYS
24 ========================================================================== */
25
26 // Metric card for displaying key numbers
27 .thinkrank-metric-card {
28 padding: $spacing-lg;
29 background: $white;
30 border: 1px solid $gray-200;
31 border-radius: $radius-md;
32 text-align: center;
33 transition: all 0.2s ease;
34
35 &:hover {
36 border-color: $gray-300;
37 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
38 }
39 }
40
41 .thinkrank-metric-value {
42 font-size: $font-size-2xl;
43 font-weight: $font-weight-bold;
44 color: $gray-900;
45 line-height: 1.2;
46 margin-bottom: $spacing-xs;
47 }
48
49 .thinkrank-metric-label {
50 font-size: $font-size-sm;
51 color: $gray-600;
52 font-weight: $font-weight-medium;
53 text-transform: uppercase;
54 letter-spacing: 0.025em;
55 }
56
57 // Small metric displays for inline use
58 .thinkrank-metric-small {
59 font-size: $font-size-sm;
60 color: $gray-700;
61
62 .thinkrank-metric-label {
63 font-size: $font-size-xs;
64 color: $gray-500;
65 margin-right: $spacing-xs;
66 }
67
68 .thinkrank-metric-value {
69 font-weight: $font-weight-semibold;
70 color: $gray-900;
71 }
72 }
73
74 /* ==========================================================================
75 SEO HEALTH SCORE
76 ========================================================================== */
77
78 .thinkrank-seo-health-card {
79 .thinkrank-health-score {
80 display: flex;
81 align-items: center;
82 gap: $spacing-sm;
83
84 .thinkrank-score-value {
85 font-size: $font-size-3xl;
86 font-weight: $font-weight-bold;
87 line-height: 1;
88 }
89
90 .thinkrank-score-grade {
91 font-size: $font-size-lg;
92 font-weight: $font-weight-semibold;
93 padding: $spacing-xs $spacing-sm;
94 border-radius: $radius-sm;
95 background: rgba(255, 255, 255, 0.8);
96 }
97
98 // Score color variants
99 &.thinkrank-score-success {
100 .thinkrank-score-value { color: $success-green; }
101 .thinkrank-score-grade {
102 background: rgba($success-green, 0.1);
103 color: $success-green;
104 }
105 }
106
107 &.thinkrank-score-warning {
108 .thinkrank-score-value { color: $warning-orange; }
109 .thinkrank-score-grade {
110 background: rgba($warning-orange, 0.1);
111 color: $warning-orange;
112 }
113 }
114
115 &.thinkrank-score-error {
116 .thinkrank-score-value { color: $error-red; }
117 .thinkrank-score-grade {
118 background: rgba($error-red, 0.1);
119 color: $error-red;
120 }
121 }
122 }
123 }
124
125 // Component scores grid
126 .thinkrank-component-score {
127 padding: $spacing-sm;
128 background: $gray-50;
129 border-radius: $radius-sm;
130 text-align: center;
131
132 .thinkrank-component-name {
133 font-size: $font-size-xs;
134 color: $gray-600;
135 margin-bottom: $spacing-xs;
136 text-transform: uppercase;
137 letter-spacing: 0.025em;
138 }
139
140 .thinkrank-component-value {
141 font-size: $font-size-sm;
142 font-weight: $font-weight-semibold;
143 color: $gray-900;
144 }
145 }
146
147 // Recommendations list
148 .thinkrank-recommendations {
149 margin-top: $spacing-md;
150
151 .thinkrank-recommendation-list {
152 list-style: none;
153 padding: 0;
154 margin: $spacing-sm 0 0 0;
155
156 .thinkrank-recommendation {
157 padding: $spacing-sm;
158 margin-bottom: $spacing-xs;
159 border-left: 3px solid $gray-300;
160 background: $gray-50;
161 font-size: $font-size-sm;
162
163 &.thinkrank-priority-high {
164 border-left-color: $error-red;
165 background: rgba($error-red, 0.05);
166 }
167
168 &.thinkrank-priority-medium {
169 border-left-color: $warning-orange;
170 background: rgba($warning-orange, 0.05);
171 }
172
173 &.thinkrank-priority-low {
174 border-left-color: $success-green;
175 background: rgba($success-green, 0.05);
176 }
177 }
178 }
179 }
180
181 /* ==========================================================================
182 TREND INDICATORS
183 ========================================================================== */
184
185 .thinkrank-trend-item {
186 padding: $spacing-sm 0;
187 border-bottom: 1px solid $gray-100;
188
189 &:last-child {
190 border-bottom: none;
191 }
192 }
193
194 .thinkrank-trend-indicator {
195 display: flex;
196 align-items: center;
197 gap: $spacing-xs;
198
199 .thinkrank-trend-value {
200 font-weight: $font-weight-semibold;
201 font-size: $font-size-sm;
202 }
203
204 .thinkrank-trend-significance {
205 font-size: $font-size-xs;
206 padding: 2px $spacing-xs;
207 border-radius: $radius-sm;
208 text-transform: uppercase;
209 letter-spacing: 0.025em;
210 }
211
212 // Trend direction colors
213 &.thinkrank-trend-up {
214 .thinkrank-trend-value { color: $success-green; }
215 .thinkrank-trend-significance.thinkrank-significance-high {
216 background: rgba($success-green, 0.1);
217 color: $success-green;
218 }
219 }
220
221 &.thinkrank-trend-down {
222 .thinkrank-trend-value { color: $error-red; }
223 .thinkrank-trend-significance.thinkrank-significance-high {
224 background: rgba($error-red, 0.1);
225 color: $error-red;
226 }
227 }
228
229 &.thinkrank-trend-stable {
230 .thinkrank-trend-value { color: $gray-600; }
231 }
232 }
233
234 // Metric trend indicators (small, inline)
235 .thinkrank-metric-trend {
236 font-size: $font-size-xs;
237 font-weight: $font-weight-medium;
238 margin-top: $spacing-xs;
239
240 &.thinkrank-trend-up { color: $success-green; }
241 &.thinkrank-trend-down { color: $error-red; }
242 &.thinkrank-trend-stable { color: $gray-500; }
243 }
244
245 .thinkrank-trend-summary {
246 padding: $spacing-sm;
247 background: $gray-50;
248 border-radius: $radius-sm;
249 font-size: $font-size-sm;
250 color: $gray-700;
251 margin-top: $spacing-sm;
252 }
253
254 /* ==========================================================================
255 KEYWORD & OPPORTUNITY COMPONENTS
256 ========================================================================== */
257
258 // Keyword item with indicators
259 .thinkrank-keyword-item {
260 .thinkrank-keyword-indicators {
261 margin-top: $spacing-xs;
262 display: flex;
263 gap: $spacing-xs;
264 }
265 }
266
267 .thinkrank-keyword-opportunity {
268 display: flex;
269 flex-direction: column;
270 gap: $spacing-xs;
271 }
272
273 // Badge components
274 .thinkrank-keyword-badge,
275 .thinkrank-opportunity-badge {
276 display: inline-flex;
277 align-items: center;
278 padding: 2px $spacing-xs;
279 font-size: $font-size-xs;
280 font-weight: $font-weight-medium;
281 border-radius: $radius-sm;
282 text-transform: uppercase;
283 letter-spacing: 0.025em;
284
285 &.thinkrank-badge-success {
286 background: rgba($success-green, 0.1);
287 color: $success-green;
288 }
289
290 &.thinkrank-badge-warning {
291 background: rgba($warning-orange, 0.1);
292 color: $warning-orange;
293 }
294
295 &.thinkrank-badge-info {
296 background: rgba($primary-blue, 0.1);
297 color: $primary-blue;
298 }
299 }
300
301 // Status badge components for connection status
302 .thinkrank-status-badge {
303 display: inline-flex;
304 align-items: center;
305 padding: 4px $spacing-sm;
306 font-size: $font-size-xs;
307 font-weight: $font-weight-medium;
308 border-radius: $radius-sm;
309 text-transform: uppercase;
310 letter-spacing: 0.025em;
311
312 &.thinkrank-status-configured {
313 background: rgba($success-green, 0.1);
314 color: $success-green;
315 border: 1px solid rgba($success-green, 0.2);
316 }
317
318 &.thinkrank-status-error {
319 background: rgba($error-red, 0.1);
320 color: $error-red;
321 border: 1px solid rgba($error-red, 0.2);
322 }
323
324 &.thinkrank-status-not_configured {
325 background: rgba($gray-500, 0.1);
326 color: $gray-600;
327 border: 1px solid rgba($gray-500, 0.2);
328 }
329 }
330
331 /* ==========================================================================
332 QUICK WINS & OPPORTUNITIES
333 ========================================================================== */
334
335 .thinkrank-quick-wins-summary {
336 text-align: right;
337
338 .thinkrank-potential-clicks {
339 font-weight: $font-weight-semibold;
340 color: $success-green;
341 }
342 }
343
344 .thinkrank-quick-win-item {
345 padding: $spacing-md;
346 border: 1px solid $gray-200;
347 border-radius: $radius-md;
348 margin-bottom: $spacing-sm;
349 background: $white;
350
351 &:hover {
352 border-color: $primary-blue;
353 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
354 }
355 }
356
357 .thinkrank-opportunity-content {
358 .thinkrank-opportunity-metrics {
359 display: flex;
360 flex-direction: column;
361 gap: $spacing-xs;
362
363 .thinkrank-metric-row {
364 display: flex;
365 align-items: center;
366 gap: $spacing-xs;
367 font-size: $font-size-sm;
368
369 .thinkrank-metric-label {
370 color: $gray-600;
371 min-width: 60px;
372 }
373
374 .thinkrank-metric-value {
375 font-weight: $font-weight-semibold;
376 color: $gray-900;
377 }
378
379 .thinkrank-metric-arrow {
380 color: $gray-400;
381 font-weight: $font-weight-bold;
382 }
383
384 .thinkrank-metric-target {
385 font-weight: $font-weight-semibold;
386 color: $success-green;
387 }
388 }
389 }
390 }
391
392 // Impact and opportunity scores
393 .thinkrank-impact-score,
394 .thinkrank-opportunity-score {
395 padding: $spacing-xs $spacing-sm;
396 border-radius: $radius-sm;
397 font-size: $font-size-xs;
398 font-weight: $font-weight-bold;
399 text-align: center;
400 min-width: 40px;
401
402 &.thinkrank-score-high {
403 background: rgba($success-green, 0.1);
404 color: $success-green;
405 }
406
407 &.thinkrank-score-medium {
408 background: rgba($warning-orange, 0.1);
409 color: $warning-orange;
410 }
411
412 &.thinkrank-score-low {
413 background: rgba($gray-500, 0.1);
414 color: $gray-600;
415 }
416 }
417
418 /* ==========================================================================
419 IMPACT/EFFORT MATRIX
420 ========================================================================== */
421
422 .thinkrank-matrix-grid {
423 display: grid;
424 grid-template-columns: 1fr 1fr;
425 gap: $spacing-md;
426 margin: $spacing-lg 0;
427
428 @media (max-width: #{$breakpoint-sm - 1px}) {
429 grid-template-columns: 1fr;
430 gap: $spacing-sm;
431 }
432 }
433
434 .thinkrank-matrix-quadrant {
435 padding: $spacing-lg;
436 border-radius: $radius-md;
437 border: 2px solid;
438 min-height: 120px;
439
440 .thinkrank-quadrant-header {
441 margin-bottom: $spacing-md;
442
443 .thinkrank-quadrant-title {
444 font-size: $font-size-base;
445 font-weight: $font-weight-bold;
446 margin-bottom: $spacing-xs;
447 }
448
449 .thinkrank-quadrant-subtitle {
450 color: $gray-600;
451 margin-bottom: $spacing-sm;
452 }
453
454 .thinkrank-quadrant-count {
455 display: inline-flex;
456 align-items: center;
457 justify-content: center;
458 width: 24px;
459 height: 24px;
460 border-radius: 50%;
461 font-size: $font-size-sm;
462 font-weight: $font-weight-bold;
463 background: rgba(255, 255, 255, 0.8);
464 }
465 }
466
467 .thinkrank-matrix-item {
468 padding: $spacing-xs;
469 margin-bottom: $spacing-xs;
470 background: rgba(255, 255, 255, 0.5);
471 border-radius: $radius-sm;
472 font-size: $font-size-sm;
473
474 &:last-child {
475 margin-bottom: 0;
476 }
477 }
478
479 // Quadrant color variants
480 &.thinkrank-quadrant-quick-wins {
481 border-color: $success-green;
482 background: rgba($success-green, 0.05);
483
484 .thinkrank-quadrant-title { color: $success-green; }
485 .thinkrank-quadrant-count {
486 background: $success-green;
487 color: $white;
488 }
489 }
490
491 &.thinkrank-quadrant-major-projects {
492 border-color: $primary-blue;
493 background: rgba($primary-blue, 0.05);
494
495 .thinkrank-quadrant-title { color: $primary-blue; }
496 .thinkrank-quadrant-count {
497 background: $primary-blue;
498 color: $white;
499 }
500 }
501
502 &.thinkrank-quadrant-fill-ins {
503 border-color: $gray-400;
504 background: rgba($gray-400, 0.05);
505
506 .thinkrank-quadrant-title { color: $gray-600; }
507 .thinkrank-quadrant-count {
508 background: $gray-400;
509 color: $white;
510 }
511 }
512
513 &.thinkrank-quadrant-avoid {
514 border-color: $error-red;
515 background: rgba($error-red, 0.05);
516
517 .thinkrank-quadrant-title { color: $error-red; }
518 .thinkrank-quadrant-count {
519 background: $error-red;
520 color: $white;
521 }
522 }
523 }
524
525 .thinkrank-matrix-recommendations {
526 margin-top: $spacing-lg;
527 padding: $spacing-md;
528 background: $gray-50;
529 border-radius: $radius-md;
530 border-left: 4px solid $primary-blue;
531 }
532
533 /* ==========================================================================
534 INSIGHTS COMPONENTS
535 ========================================================================== */
536
537 .thinkrank-insight-item {
538 padding: $spacing-md;
539 border: 1px solid $gray-200;
540 border-radius: $radius-md;
541 margin-bottom: $spacing-sm;
542 background: $white;
543
544 &:hover {
545 border-color: $gray-300;
546 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
547 }
548
549 // Impact level styling
550 &.thinkrank-impact-high {
551 border-left: 4px solid $error-red;
552 }
553
554 &.thinkrank-impact-medium {
555 border-left: 4px solid $warning-orange;
556 }
557
558 &.thinkrank-impact-low {
559 border-left: 4px solid $gray-400;
560 }
561 }
562
563 .thinkrank-insight-header {
564 margin-bottom: $spacing-sm;
565 }
566
567 .thinkrank-insight-meta {
568 display: flex;
569 align-items: center;
570 gap: $spacing-xs;
571 }
572
573 .thinkrank-impact-badge {
574 padding: 2px $spacing-xs;
575 font-size: $font-size-xs;
576 font-weight: $font-weight-medium;
577 border-radius: $radius-sm;
578 text-transform: uppercase;
579 letter-spacing: 0.025em;
580
581 &.thinkrank-impact-high {
582 background: rgba($error-red, 0.1);
583 color: $error-red;
584 }
585
586 &.thinkrank-impact-medium {
587 background: rgba($warning-orange, 0.1);
588 color: $warning-orange;
589 }
590
591 &.thinkrank-impact-low {
592 background: rgba($gray-500, 0.1);
593 color: $gray-600;
594 }
595 }
596
597 .thinkrank-action-required {
598 padding: 2px $spacing-xs;
599 font-size: $font-size-xs;
600 font-weight: $font-weight-medium;
601 border-radius: $radius-sm;
602 background: rgba($primary-blue, 0.1);
603 color: $primary-blue;
604 text-transform: uppercase;
605 letter-spacing: 0.025em;
606 }
607
608 .thinkrank-insight-content {
609 .thinkrank-insight-action {
610 margin-top: $spacing-sm;
611 padding: $spacing-sm;
612 background: $gray-50;
613 border-radius: $radius-sm;
614 border-left: 3px solid $primary-blue;
615 }
616 }
617
618 /* ==========================================================================
619 LOADING STATES
620 ========================================================================== */
621
622 .thinkrank-intelligence-loading {
623 display: flex;
624 align-items: center;
625 justify-content: center;
626 padding: $spacing-xl;
627
628 .thinkrank-loading-text {
629 margin-left: $spacing-sm;
630 color: $gray-600;
631 font-style: italic;
632 }
633 }
634
635 /* ==========================================================================
636 RESPONSIVE ADJUSTMENTS
637 ========================================================================== */
638
639 @media (max-width: #{$breakpoint-md - 1px}) {
640 .thinkrank-metric-card {
641 padding: $spacing-md;
642 }
643
644 .thinkrank-metric-value {
645 font-size: $font-size-xl;
646 }
647
648 .thinkrank-health-score {
649 .thinkrank-score-value {
650 font-size: $font-size-2xl;
651 }
652 }
653
654 .thinkrank-quick-win-item,
655 .thinkrank-insight-item {
656 padding: $spacing-sm;
657 }
658
659 .thinkrank-opportunity-metrics {
660 .thinkrank-metric-row {
661 flex-direction: column;
662 align-items: flex-start;
663 gap: $spacing-xs;
664 }
665 }
666 }
667