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

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

728 lines 17.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Admin Styles
3 *
4 * Main stylesheet for ThinkRank admin interface
5 *
6 * @package ThinkRank
7 * @since 1.0.0
8 */
9
10 // Import all SCSS modules first (must be at the top)
11 @use '../../shared/styles/variables' as *;
12 @use '../../shared/styles/mixins' as *;
13 @use './_utilities'; // Add utilities after variables but before components
14 @use './components';
15
16 // CSS Custom Properties for WordPress compatibility
17 // Main layout and header styles that might be missing
18 :root {
19 --thinkrank-primary: #{$thinkrank-primary};
20 --thinkrank-secondary: #{$thinkrank-secondary};
21 --thinkrank-success: #{$thinkrank-success};
22 --thinkrank-warning: #{$thinkrank-warning};
23 --thinkrank-error: #{$thinkrank-error};
24 --thinkrank-text: #{$thinkrank-text-primary};
25 --thinkrank-text-primary: #{$thinkrank-text-primary};
26 --thinkrank-text-secondary: #{$thinkrank-text-secondary};
27 --thinkrank-text-light: #{$thinkrank-text-light};
28 --thinkrank-border: #{$thinkrank-border};
29 --thinkrank-border-light: #{$thinkrank-border-light};
30 --thinkrank-bg: #{$thinkrank-bg};
31 --thinkrank-white: #{$thinkrank-white};
32 --thinkrank-shadow: #{$thinkrank-shadow};
33 --thinkrank-radius: #{$thinkrank-radius};
34 --thinkrank-spacing: #{$thinkrank-spacing};
35 }
36
37 // Base styles
38 .thinkrank-app {
39 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;
40 color: var(--thinkrank-text);
41 line-height: 1.5;
42 background: #fafbfc; // Subtle page background for better visual connection
43 min-height: 100vh;
44 }
45
46 // Loading states
47 .thinkrank-loading {
48 display: flex;
49 flex-direction: column;
50 align-items: center;
51 justify-content: center;
52 padding: calc(var(--thinkrank-spacing) * 2);
53 text-align: center;
54
55 .spinner {
56 margin-bottom: var(--thinkrank-spacing);
57 }
58
59 p {
60 margin: 0;
61 color: var(--thinkrank-text-light);
62 }
63 }
64
65 // Error states
66 .thinkrank-error {
67 padding: var(--thinkrank-spacing);
68
69 .notice {
70 margin: 0;
71 }
72 }
73 .thinkrank-content .components-notice{
74 margin-bottom: 10px;
75 }
76 // Main layout - matching header container design
77 .thinkrank-main {
78 display: flex;
79 gap: var(--thinkrank-spacing);
80 margin: 0 auto; // Remove top/bottom margin
81 padding: 20px; // Consistent padding with header
82
83 @media (max-width: 768px) {
84 padding: 16px; // Match header mobile padding
85 }
86 }
87
88 // Navigation
89 .thinkrank-navigation {
90 flex: 0 0 200px;
91
92 .nav-tab-wrapper {
93 border: none;
94 margin: 0;
95
96 .nav-tab {
97 display: block;
98 width: 100%;
99 margin: 0 0 2px 0;
100 padding: 12px var(--thinkrank-spacing);
101 border: 1px solid var(--thinkrank-border);
102 border-radius: var(--thinkrank-radius);
103 background: var(--thinkrank-white);
104 color: var(--thinkrank-text);
105 text-decoration: none;
106 transition: all 0.2s ease;
107
108 &:hover {
109 background: var(--thinkrank-bg);
110 color: var(--thinkrank-primary);
111 }
112
113 &.nav-tab-active {
114 background: var(--thinkrank-primary);
115 color: var(--thinkrank-white);
116 border-color: var(--thinkrank-primary);
117 }
118 }
119 }
120 }
121
122 // Content area
123 .thinkrank-content {
124 flex: 1;
125 background: var(--thinkrank-white);
126 border: 1px solid var(--thinkrank-border);
127 border-radius: var(--thinkrank-radius);
128 box-shadow: var(--thinkrank-shadow);
129 padding: var(--thinkrank-spacing);
130 }
131
132 // Dashboard specific styles
133 .thinkrank-dashboard {
134 .thinkrank-dashboard-stats {
135 display: grid;
136 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
137 gap: var(--thinkrank-spacing);
138 margin-top: var(--thinkrank-spacing);
139
140 .stat-card {
141 padding: 20px;
142 background: var(--thinkrank-white);
143 border: 1px solid var(--thinkrank-border);
144 border-radius: var(--thinkrank-radius);
145 /* Removed text-align: center - using left-aligned design */
146 transition: all 0.2s ease;
147
148 &:hover {
149 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
150 transform: translateY(-2px);
151 }
152
153 h3 {
154 margin: 0 0 12px 0;
155 font-size: 14px;
156 font-weight: 500;
157 color: var(--thinkrank-text-light);
158 text-transform: uppercase;
159 letter-spacing: 0.5px;
160 }
161
162 .stat-number {
163 margin: 0 0 8px 0;
164 font-size: 32px;
165 font-weight: 700;
166 color: var(--thinkrank-primary);
167 line-height: 1;
168 }
169
170 .stat-label {
171 margin: 0;
172 font-size: 12px;
173 color: var(--thinkrank-text-light);
174 }
175 }
176 }
177
178 // Legacy AI tools grid styles removed - now using utility classes
179 }
180
181 // Compact Header - matching content container design
182 .thinkrank-header-compact {
183 background: var(--thinkrank-white);
184 border-bottom: 1px solid var(--thinkrank-border);
185 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
186 margin-bottom: 0; // Remove margin to connect with content
187
188 .header-main {
189 display: flex;
190 align-items: center;
191 justify-content: space-between;
192 padding: 16px 20px; // Match content container padding
193 margin: 0 auto;
194 gap: 24px;
195
196 @media (max-width: 768px) {
197 padding: 12px 16px; // Smaller padding on mobile
198 }
199 }
200
201 .header-branding {
202 display: flex;
203 align-items: center;
204 gap: 24px;
205 flex: 1;
206 min-width: 0;
207 }
208
209 .brand-info {
210 flex-shrink: 0;
211
212 .brand-name {
213 display: flex;
214 align-items: center;
215 gap: 10px; // Slightly increased gap
216 margin: 0;
217 font-size: 20px; // Slightly larger for better hierarchy
218 font-weight: 600;
219 color: var(--thinkrank-text);
220
221 .brand-icon {
222 width: 22px;
223 height: 22px;
224 color: var(--thinkrank-primary); // Use primary color for the icon
225 filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1)); // Subtle shadow for depth
226 flex-shrink: 0; // Prevent icon from shrinking
227 }
228 }
229 }
230
231 .page-info {
232 flex: 1;
233 min-width: 0;
234 margin-left: 16px; // Add separation from brand
235
236 .page-title {
237 margin: 0;
238 font-size: 18px; // Increased for better hierarchy
239 font-weight: 500;
240 color: var(--thinkrank-text);
241 white-space: nowrap;
242 overflow: hidden;
243 text-overflow: ellipsis;
244 line-height: 1.3; // Better line height
245 }
246
247 .page-description {
248 margin: 4px 0 0 0; // Slightly more space
249 font-size: 14px; // Slightly larger for readability
250 color: var(--thinkrank-text-light);
251 white-space: nowrap;
252 overflow: hidden;
253 text-overflow: ellipsis;
254 line-height: 1.4;
255 }
256 }
257
258 .header-actions {
259 display: flex;
260 align-items: center;
261 flex-shrink: 0;
262 }
263
264 .version-info {
265 font-size: 12px;
266 font-weight: 500; // Slightly bolder
267 color: var(--thinkrank-text-light);
268 background: #f8f9fa; // Subtle background
269 padding: 6px 12px; // More padding for better appearance
270 border-radius: 6px; // More rounded
271 border: 1px solid #e9ecef; // Lighter border
272 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); // Subtle shadow
273 transition: all 0.2s ease;
274
275 &:hover {
276 background: #e9ecef;
277 border-color: #dee2e6;
278 }
279 }
280
281 // Responsive design for compact header
282 @media (max-width: 768px) {
283 .header-main {
284 padding: 10px 16px;
285 flex-wrap: wrap;
286 gap: 12px;
287 }
288
289 .header-branding {
290 gap: 16px;
291 flex: 1;
292 min-width: 0;
293 }
294
295 .brand-info .brand-name {
296 font-size: 16px;
297 }
298
299 .page-info {
300 .page-title {
301 font-size: 14px;
302 }
303
304 .page-description {
305 display: none; // Hide description on mobile
306 }
307 }
308
309 .version-info {
310 font-size: 11px;
311 padding: 3px 6px;
312 }
313 }
314
315 @media (max-width: 480px) {
316 .header-branding {
317 flex-direction: column;
318 align-items: flex-start;
319 gap: 8px;
320 }
321
322 .page-info .page-title {
323 font-size: 13px;
324 }
325
326 .version-info {
327 font-size: 10px;
328 padding: 2px 4px;
329 }
330 }
331 }
332
333 @keyframes pulse {
334 0% {
335 opacity: 1;
336 }
337 50% {
338 opacity: 0.5;
339 }
340 100% {
341 opacity: 1;
342 }
343 }
344
345 // Cards
346 .thinkrank-card {
347 background: var(--thinkrank-white);
348 border: 1px solid var(--thinkrank-border);
349 border-radius: var(--thinkrank-radius);
350 box-shadow: var(--thinkrank-shadow);
351 margin-bottom: var(--thinkrank-spacing);
352
353 .card-header {
354 padding: var(--thinkrank-spacing);
355 border-bottom: 1px solid var(--thinkrank-border);
356 background: var(--thinkrank-bg);
357
358 h2, h3 {
359 margin: 0;
360 font-size: 18px;
361 font-weight: 600;
362 }
363 }
364
365 .card-body {
366 padding: var(--thinkrank-spacing);
367 }
368
369 .card-footer {
370 padding: var(--thinkrank-spacing);
371 border-top: 1px solid var(--thinkrank-border);
372 background: var(--thinkrank-bg);
373 }
374 }
375
376 // Buttons
377 .thinkrank-button {
378 display: inline-flex;
379 align-items: center;
380 gap: 8px;
381 padding: 8px 16px;
382 border: 1px solid var(--thinkrank-border);
383 border-radius: var(--thinkrank-radius);
384 background: var(--thinkrank-white);
385 color: var(--thinkrank-text);
386 text-decoration: none;
387 cursor: pointer;
388 transition: all 0.2s ease;
389
390 &:hover {
391 background: var(--thinkrank-bg);
392 border-color: var(--thinkrank-primary);
393 color: var(--thinkrank-primary);
394 }
395
396 &.is-primary {
397 background: var(--thinkrank-primary);
398 border-color: var(--thinkrank-primary);
399 color: var(--thinkrank-white);
400
401 &:hover {
402 background: var(--thinkrank-secondary);
403 border-color: var(--thinkrank-secondary);
404 }
405 }
406
407 &.is-success {
408 background: var(--thinkrank-success);
409 border-color: var(--thinkrank-success);
410 color: var(--thinkrank-white);
411 }
412
413 &.is-warning {
414 background: var(--thinkrank-warning);
415 border-color: var(--thinkrank-warning);
416 color: var(--thinkrank-text);
417 }
418
419 &.is-danger {
420 background: var(--thinkrank-error);
421 border-color: var(--thinkrank-error);
422 color: var(--thinkrank-white);
423 }
424
425 &:disabled,
426 &.is-disabled {
427 opacity: 0.6;
428 cursor: not-allowed;
429
430 &:hover {
431 background: var(--thinkrank-white);
432 border-color: var(--thinkrank-border);
433 color: var(--thinkrank-text);
434 }
435 }
436 }
437
438 // AI Button Styles
439 .thinkrank-ai-button {
440 display: inline-flex;
441 align-items: center;
442 gap: 8px;
443 font-weight: 500;
444 transition: all 0.2s ease;
445 position: relative;
446
447 .sparkle-icon {
448 font-size: 16px;
449 animation: sparkle 2s ease-in-out infinite;
450 }
451
452 .components-spinner {
453 margin-right: 4px;
454 }
455
456 // Size variants
457 &--small {
458 padding: 6px 12px;
459 font-size: 13px;
460
461 .sparkle-icon {
462 font-size: 14px;
463 }
464 }
465
466 &--medium {
467 padding: 8px 16px;
468 font-size: 14px;
469
470 .sparkle-icon {
471 font-size: 16px;
472 }
473 }
474
475 &--large {
476 padding: 12px 20px;
477 font-size: 16px;
478
479 .sparkle-icon {
480 font-size: 18px;
481 }
482 }
483
484 // Variant styles
485 &--primary {
486 background: linear-gradient(135deg, #2563eb 0%, #3b82f6 100%);
487 border-color: #2563eb;
488 color: white;
489 box-shadow: 0 2px 4px rgba(37, 99, 235, 0.2);
490
491 &:hover:not(:disabled) {
492 background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 100%);
493 border-color: #1d4ed8;
494 transform: translateY(-1px);
495 box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3);
496 }
497
498 &:active {
499 transform: translateY(0);
500 box-shadow: 0 2px 4px rgba(37, 99, 235, 0.2);
501 }
502 }
503
504 &--secondary {
505 background: var(--thinkrank-white);
506 border-color: var(--thinkrank-border);
507 color: var(--thinkrank-text);
508
509 &:hover:not(:disabled) {
510 background: var(--thinkrank-bg);
511 border-color: var(--thinkrank-primary);
512 color: var(--thinkrank-primary);
513 transform: translateY(-1px);
514 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
515 }
516 }
517
518 &:disabled {
519 opacity: 0.6;
520 cursor: not-allowed;
521 transform: none !important;
522 box-shadow: none !important;
523
524 .sparkle-icon {
525 animation: none;
526 }
527 }
528 }
529
530 @keyframes sparkle {
531 0%, 100% {
532 transform: scale(1) rotate(0deg);
533 opacity: 1;
534 }
535 25% {
536 transform: scale(1.1) rotate(90deg);
537 opacity: 0.8;
538 }
539 50% {
540 transform: scale(1) rotate(180deg);
541 opacity: 1;
542 }
543 75% {
544 transform: scale(1.1) rotate(270deg);
545 opacity: 0.8;
546 }
547 }
548
549 // Forms
550 .thinkrank-form {
551 .form-group {
552 margin-bottom: var(--thinkrank-spacing);
553
554 label {
555 display: block;
556 margin-bottom: 4px;
557 font-weight: 600;
558 }
559
560 .description {
561 margin-top: 4px;
562 font-size: 13px;
563 color: var(--thinkrank-text-light);
564 }
565 }
566
567 input[type="text"]="text""],
568 input[type="email"]="email""],
569 input[type="password"]="password""],
570 input[type="number"]="number""],
571 textarea,
572 select {
573 width: 100%;
574 padding: 8px 12px;
575 border: 1px solid var(--thinkrank-border);
576 border-radius: var(--thinkrank-radius);
577 font-size: 14px;
578
579 &:focus {
580 outline: none;
581 border-color: var(--thinkrank-primary);
582 box-shadow: 0 0 0 1px var(--thinkrank-primary);
583 }
584 }
585 }
586
587 // Notices
588 .thinkrank-notice {
589 padding: 12px var(--thinkrank-spacing);
590 border-left: 4px solid var(--thinkrank-primary);
591 background: var(--thinkrank-white);
592 margin-bottom: var(--thinkrank-spacing);
593
594 &.is-success {
595 border-left-color: var(--thinkrank-success);
596 }
597
598 &.is-warning {
599 border-left-color: var(--thinkrank-warning);
600 }
601
602 &.is-error {
603 border-left-color: var(--thinkrank-error);
604 }
605
606 p {
607 margin: 0;
608 }
609 }
610
611 // Responsive design
612 @media (max-width: 768px) {
613 .thinkrank-main {
614 flex-direction: column;
615 }
616
617 .thinkrank-navigation {
618 flex: none;
619
620 .nav-tab-wrapper {
621 display: flex;
622 overflow-x: auto;
623
624 .nav-tab {
625 flex: 0 0 auto;
626 white-space: nowrap;
627 }
628 }
629 }
630 }
631
632 // WordPress admin compatibility
633 .wp-admin {
634 .thinkrank-app {
635 // Ensure compatibility with WordPress admin styles
636 * {
637 box-sizing: border-box;
638 }
639 }
640 }
641
642 /* Missing Layout Styles - Ensure main layout works */
643 .thinkrank-main-container {
644 max-width: 1400px;
645 margin: 0 auto;
646 padding: 20px;
647
648 @media (min-width: 1600px) {
649 max-width: 1600px;
650 }
651
652 @media (max-width: 768px) {
653 padding: 16px;
654 max-width: 100%;
655 }
656 }
657
658 /* Fix horizontal overflow issues */
659 .thinkrank-app {
660 pre, code {
661 overflow-wrap: break-word !important;
662 word-wrap: break-word !important;
663 white-space: pre-wrap !important;
664 max-width: 100% !important;
665 overflow-x: auto !important;
666 }
667
668 // Ensure schema preview containers don't overflow
669 .components-card {
670 overflow: hidden;
671
672 pre {
673 max-width: 100%;
674 box-sizing: border-box;
675 }
676 }
677 }
678
679 /* Ensure WordPress components work properly */
680 .components-card {
681 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1) !important;
682 border: 1px solid #e1e5e9 !important;
683 border-radius: 8px !important;
684 transition: box-shadow 0.2s ease;
685 overflow: hidden;
686
687 &:hover {
688 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12) !important;
689 }
690 }
691
692 .components-card-header {
693 border-bottom: 1px solid #f0f0f1 !important;
694 background: #fafafa !important;
695 border-radius: 8px 8px 0 0 !important;
696 }
697
698 .components-card-body {
699 padding: 1.5rem !important;
700 }
701
702 /* Button spacing fixes */
703 .components-button + .components-button {
704 margin-left: 0.75rem;
705 }
706
707 .components-button.is-primary {
708 background: #2563eb !important;
709 border-color: #2563eb !important;
710
711 &:hover:not(:disabled) {
712 background: #1d4ed8 !important;
713 border-color: #1d4ed8 !important;
714 }
715 }
716
717 /* Export options spacing */
718 .thinkrank-export-options {
719 margin-top: 2rem;
720 padding-top: 1.5rem;
721 border-top: 1px solid #e5e7eb;
722 }
723
724
725
726
727
728