/** * Admin Styles * * Main stylesheet for ThinkRank admin interface * * @package ThinkRank * @since 1.0.0 */ // Import all SCSS modules first (must be at the top) @use '../../shared/styles/variables' as *; @use '../../shared/styles/mixins' as *; @use './_utilities'; // Add utilities after variables but before components @use './components'; // CSS Custom Properties for WordPress compatibility // Main layout and header styles that might be missing :root { --thinkrank-primary: #{$thinkrank-primary}; --thinkrank-secondary: #{$thinkrank-secondary}; --thinkrank-success: #{$thinkrank-success}; --thinkrank-warning: #{$thinkrank-warning}; --thinkrank-error: #{$thinkrank-error}; --thinkrank-text: #{$thinkrank-text-primary}; --thinkrank-text-primary: #{$thinkrank-text-primary}; --thinkrank-text-secondary: #{$thinkrank-text-secondary}; --thinkrank-text-light: #{$thinkrank-text-light}; --thinkrank-border: #{$thinkrank-border}; --thinkrank-border-light: #{$thinkrank-border-light}; --thinkrank-bg: #{$thinkrank-bg}; --thinkrank-white: #{$thinkrank-white}; --thinkrank-shadow: #{$thinkrank-shadow}; --thinkrank-radius: #{$thinkrank-radius}; --thinkrank-spacing: #{$thinkrank-spacing}; } // Base styles .thinkrank-app { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif; color: var(--thinkrank-text); line-height: 1.5; background: #fafbfc; // Subtle page background for better visual connection min-height: 100vh; } // Loading states .thinkrank-loading { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: calc(var(--thinkrank-spacing) * 2); text-align: center; .spinner { margin-bottom: var(--thinkrank-spacing); } p { margin: 0; color: var(--thinkrank-text-light); } } // Error states .thinkrank-error { padding: var(--thinkrank-spacing); .notice { margin: 0; } } .thinkrank-content .components-notice{ margin-bottom: 10px; } // Main layout - matching header container design .thinkrank-main { display: flex; gap: var(--thinkrank-spacing); margin: 0 auto; // Remove top/bottom margin padding: 20px; // Consistent padding with header @media (max-width: 768px) { padding: 16px; // Match header mobile padding } } // Navigation .thinkrank-navigation { flex: 0 0 200px; .nav-tab-wrapper { border: none; margin: 0; .nav-tab { display: block; width: 100%; margin: 0 0 2px 0; padding: 12px var(--thinkrank-spacing); border: 1px solid var(--thinkrank-border); border-radius: var(--thinkrank-radius); background: var(--thinkrank-white); color: var(--thinkrank-text); text-decoration: none; transition: all 0.2s ease; &:hover { background: var(--thinkrank-bg); color: var(--thinkrank-primary); } &.nav-tab-active { background: var(--thinkrank-primary); color: var(--thinkrank-white); border-color: var(--thinkrank-primary); } } } } // Content area .thinkrank-content { flex: 1; background: var(--thinkrank-white); border: 1px solid var(--thinkrank-border); border-radius: var(--thinkrank-radius); box-shadow: var(--thinkrank-shadow); padding: var(--thinkrank-spacing); } // Dashboard specific styles .thinkrank-dashboard { .thinkrank-dashboard-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--thinkrank-spacing); margin-top: var(--thinkrank-spacing); .stat-card { padding: 20px; background: var(--thinkrank-white); border: 1px solid var(--thinkrank-border); border-radius: var(--thinkrank-radius); /* Removed text-align: center - using left-aligned design */ transition: all 0.2s ease; &:hover { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); transform: translateY(-2px); } h3 { margin: 0 0 12px 0; font-size: 14px; font-weight: 500; color: var(--thinkrank-text-light); text-transform: uppercase; letter-spacing: 0.5px; } .stat-number { margin: 0 0 8px 0; font-size: 32px; font-weight: 700; color: var(--thinkrank-primary); line-height: 1; } .stat-label { margin: 0; font-size: 12px; color: var(--thinkrank-text-light); } } } // Legacy AI tools grid styles removed - now using utility classes } // Compact Header - matching content container design .thinkrank-header-compact { background: var(--thinkrank-white); border-bottom: 1px solid var(--thinkrank-border); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); margin-bottom: 0; // Remove margin to connect with content .header-main { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; // Match content container padding margin: 0 auto; gap: 24px; @media (max-width: 768px) { padding: 12px 16px; // Smaller padding on mobile } } .header-branding { display: flex; align-items: center; gap: 24px; flex: 1; min-width: 0; } .brand-info { flex-shrink: 0; .brand-name { display: flex; align-items: center; gap: 10px; // Slightly increased gap margin: 0; font-size: 20px; // Slightly larger for better hierarchy font-weight: 600; color: var(--thinkrank-text); .brand-icon { width: 22px; height: 22px; color: var(--thinkrank-primary); // Use primary color for the icon filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1)); // Subtle shadow for depth flex-shrink: 0; // Prevent icon from shrinking } } } .page-info { flex: 1; min-width: 0; margin-left: 16px; // Add separation from brand .page-title { margin: 0; font-size: 18px; // Increased for better hierarchy font-weight: 500; color: var(--thinkrank-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.3; // Better line height } .page-description { margin: 4px 0 0 0; // Slightly more space font-size: 14px; // Slightly larger for readability color: var(--thinkrank-text-light); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.4; } } .header-actions { display: flex; align-items: center; flex-shrink: 0; } .version-info { font-size: 12px; font-weight: 500; // Slightly bolder color: var(--thinkrank-text-light); background: #f8f9fa; // Subtle background padding: 6px 12px; // More padding for better appearance border-radius: 6px; // More rounded border: 1px solid #e9ecef; // Lighter border box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); // Subtle shadow transition: all 0.2s ease; &:hover { background: #e9ecef; border-color: #dee2e6; } } // Responsive design for compact header @media (max-width: 768px) { .header-main { padding: 10px 16px; flex-wrap: wrap; gap: 12px; } .header-branding { gap: 16px; flex: 1; min-width: 0; } .brand-info .brand-name { font-size: 16px; } .page-info { .page-title { font-size: 14px; } .page-description { display: none; // Hide description on mobile } } .version-info { font-size: 11px; padding: 3px 6px; } } @media (max-width: 480px) { .header-branding { flex-direction: column; align-items: flex-start; gap: 8px; } .page-info .page-title { font-size: 13px; } .version-info { font-size: 10px; padding: 2px 4px; } } } @keyframes pulse { 0% { opacity: 1; } 50% { opacity: 0.5; } 100% { opacity: 1; } } // Cards .thinkrank-card { background: var(--thinkrank-white); border: 1px solid var(--thinkrank-border); border-radius: var(--thinkrank-radius); box-shadow: var(--thinkrank-shadow); margin-bottom: var(--thinkrank-spacing); .card-header { padding: var(--thinkrank-spacing); border-bottom: 1px solid var(--thinkrank-border); background: var(--thinkrank-bg); h2, h3 { margin: 0; font-size: 18px; font-weight: 600; } } .card-body { padding: var(--thinkrank-spacing); } .card-footer { padding: var(--thinkrank-spacing); border-top: 1px solid var(--thinkrank-border); background: var(--thinkrank-bg); } } // Buttons .thinkrank-button { display: inline-flex; align-items: center; gap: 8px; padding: 8px 16px; border: 1px solid var(--thinkrank-border); border-radius: var(--thinkrank-radius); background: var(--thinkrank-white); color: var(--thinkrank-text); text-decoration: none; cursor: pointer; transition: all 0.2s ease; &:hover { background: var(--thinkrank-bg); border-color: var(--thinkrank-primary); color: var(--thinkrank-primary); } &.is-primary { background: var(--thinkrank-primary); border-color: var(--thinkrank-primary); color: var(--thinkrank-white); &:hover { background: var(--thinkrank-secondary); border-color: var(--thinkrank-secondary); } } &.is-success { background: var(--thinkrank-success); border-color: var(--thinkrank-success); color: var(--thinkrank-white); } &.is-warning { background: var(--thinkrank-warning); border-color: var(--thinkrank-warning); color: var(--thinkrank-text); } &.is-danger { background: var(--thinkrank-error); border-color: var(--thinkrank-error); color: var(--thinkrank-white); } &:disabled, &.is-disabled { opacity: 0.6; cursor: not-allowed; &:hover { background: var(--thinkrank-white); border-color: var(--thinkrank-border); color: var(--thinkrank-text); } } } // AI Button Styles .thinkrank-ai-button { display: inline-flex; align-items: center; gap: 8px; font-weight: 500; transition: all 0.2s ease; position: relative; .sparkle-icon { font-size: 16px; animation: sparkle 2s ease-in-out infinite; } .components-spinner { margin-right: 4px; } // Size variants &--small { padding: 6px 12px; font-size: 13px; .sparkle-icon { font-size: 14px; } } &--medium { padding: 8px 16px; font-size: 14px; .sparkle-icon { font-size: 16px; } } &--large { padding: 12px 20px; font-size: 16px; .sparkle-icon { font-size: 18px; } } // Variant styles &--primary { background: linear-gradient(135deg, #2563eb 0%, #3b82f6 100%); border-color: #2563eb; color: white; box-shadow: 0 2px 4px rgba(37, 99, 235, 0.2); &:hover:not(:disabled) { background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 100%); border-color: #1d4ed8; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3); } &:active { transform: translateY(0); box-shadow: 0 2px 4px rgba(37, 99, 235, 0.2); } } &--secondary { background: var(--thinkrank-white); border-color: var(--thinkrank-border); color: var(--thinkrank-text); &:hover:not(:disabled) { background: var(--thinkrank-bg); border-color: var(--thinkrank-primary); color: var(--thinkrank-primary); transform: translateY(-1px); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } } &:disabled { opacity: 0.6; cursor: not-allowed; transform: none !important; box-shadow: none !important; .sparkle-icon { animation: none; } } } @keyframes sparkle { 0%, 100% { transform: scale(1) rotate(0deg); opacity: 1; } 25% { transform: scale(1.1) rotate(90deg); opacity: 0.8; } 50% { transform: scale(1) rotate(180deg); opacity: 1; } 75% { transform: scale(1.1) rotate(270deg); opacity: 0.8; } } // Forms .thinkrank-form { .form-group { margin-bottom: var(--thinkrank-spacing); label { display: block; margin-bottom: 4px; font-weight: 600; } .description { margin-top: 4px; font-size: 13px; color: var(--thinkrank-text-light); } } input[type="text"], input[type="email"], input[type="password"], input[type="number"], textarea, select { width: 100%; padding: 8px 12px; border: 1px solid var(--thinkrank-border); border-radius: var(--thinkrank-radius); font-size: 14px; &:focus { outline: none; border-color: var(--thinkrank-primary); box-shadow: 0 0 0 1px var(--thinkrank-primary); } } } // Notices .thinkrank-notice { padding: 12px var(--thinkrank-spacing); border-left: 4px solid var(--thinkrank-primary); background: var(--thinkrank-white); margin-bottom: var(--thinkrank-spacing); &.is-success { border-left-color: var(--thinkrank-success); } &.is-warning { border-left-color: var(--thinkrank-warning); } &.is-error { border-left-color: var(--thinkrank-error); } p { margin: 0; } } // Responsive design @media (max-width: 768px) { .thinkrank-main { flex-direction: column; } .thinkrank-navigation { flex: none; .nav-tab-wrapper { display: flex; overflow-x: auto; .nav-tab { flex: 0 0 auto; white-space: nowrap; } } } } // WordPress admin compatibility .wp-admin { .thinkrank-app { // Ensure compatibility with WordPress admin styles * { box-sizing: border-box; } } } /* Missing Layout Styles - Ensure main layout works */ .thinkrank-main-container { max-width: 1400px; margin: 0 auto; padding: 20px; @media (min-width: 1600px) { max-width: 1600px; } @media (max-width: 768px) { padding: 16px; max-width: 100%; } } /* Fix horizontal overflow issues */ .thinkrank-app { pre, code { overflow-wrap: break-word !important; word-wrap: break-word !important; white-space: pre-wrap !important; max-width: 100% !important; overflow-x: auto !important; } // Ensure schema preview containers don't overflow .components-card { overflow: hidden; pre { max-width: 100%; box-sizing: border-box; } } } /* Ensure WordPress components work properly */ .components-card { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1) !important; border: 1px solid #e1e5e9 !important; border-radius: 8px !important; transition: box-shadow 0.2s ease; overflow: hidden; &:hover { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12) !important; } } .components-card-header { border-bottom: 1px solid #f0f0f1 !important; background: #fafafa !important; border-radius: 8px 8px 0 0 !important; } .components-card-body { padding: 1.5rem !important; } /* Button spacing fixes */ .components-button + .components-button { margin-left: 0.75rem; } .components-button.is-primary { background: #2563eb !important; border-color: #2563eb !important; &:hover:not(:disabled) { background: #1d4ed8 !important; border-color: #1d4ed8 !important; } } /* Export options spacing */ .thinkrank-export-options { margin-top: 2rem; padding-top: 1.5rem; border-top: 1px solid #e5e7eb; }