/* ======================================== Claude Code SEO Assistant - Dashboard Styles ======================================== */ /* Reset & Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } :root { /* Colors */ --primary: #4F46E5; --primary-dark: #4338CA; --primary-light: #818CF8; --success: #10B981; --success-dark: #059669; --warning: #F59E0B; --warning-dark: #D97706; --danger: #EF4444; --danger-dark: #DC2626; --info: #3B82F6; --info-dark: #2563EB; /* Backgrounds */ --bg-primary: #FFFFFF; --bg-secondary: #F9FAFB; --bg-tertiary: #F3F4F6; --bg-dark: #1F2937; /* Text */ --text-primary: #111827; --text-secondary: #6B7280; --text-tertiary: #9CA3AF; --text-white: #FFFFFF; /* Borders */ --border-color: #E5E7EB; --border-dark: #D1D5DB; /* Shadows */ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1); /* Spacing */ --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; --spacing-2xl: 3rem; /* Border Radius */ --radius-sm: 0.25rem; --radius-md: 0.5rem; --radius-lg: 0.75rem; --radius-xl: 1rem; /* Transitions */ --transition: all 0.2s ease; } /* Body */ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: var(--bg-secondary); color: var(--text-primary); line-height: 1.6; } /* Navigation */ .navbar { background-color: var(--bg-primary); border-bottom: 1px solid var(--border-color); position: sticky; top: 0; z-index: 1000; box-shadow: var(--shadow-sm); } .nav-container { max-width: 1400px; margin: 0 auto; padding: var(--spacing-md) var(--spacing-lg); display: flex; align-items: center; justify-content: space-between; gap: var(--spacing-lg); } .nav-brand { display: flex; align-items: center; gap: var(--spacing-md); } .nav-brand h1 { font-size: 1.25rem; font-weight: 700; color: var(--text-primary); } .badge { display: inline-block; padding: 0.25rem 0.75rem; font-size: 0.75rem; font-weight: 600; border-radius: var(--radius-lg); background-color: var(--primary); color: var(--text-white); } .nav-menu { display: flex; gap: var(--spacing-sm); flex: 1; justify-content: center; } .nav-item { padding: 0.5rem 1rem; border: none; background: none; cursor: pointer; font-size: 0.875rem; font-weight: 500; color: var(--text-secondary); border-radius: var(--radius-md); transition: var(--transition); } .nav-item:hover { background-color: var(--bg-secondary); color: var(--text-primary); } .nav-item.active { background-color: var(--primary); color: var(--text-white); } .nav-actions { display: flex; gap: var(--spacing-md); align-items: center; } /* Main Content */ .main-content { max-width: 1400px; margin: 0 auto; padding: var(--spacing-xl) var(--spacing-lg); } .view { display: none; } .view.active { display: block; } /* Dashboard Header */ .dashboard-header { margin-bottom: var(--spacing-xl); } .dashboard-header h2 { font-size: 2rem; font-weight: 700; color: var(--text-primary); margin-bottom: var(--spacing-sm); } .subtitle { font-size: 1rem; color: var(--text-secondary); } /* Buttons */ .btn { padding: 0.5rem 1rem; border: 1px solid transparent; border-radius: var(--radius-md); font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: var(--transition); display: inline-flex; align-items: center; gap: var(--spacing-sm); } .btn-primary { background-color: var(--primary); color: var(--text-white); } .btn-primary:hover { background-color: var(--primary-dark); } .btn-secondary { background-color: var(--bg-primary); color: var(--text-primary); border-color: var(--border-color); } .btn-secondary:hover { background-color: var(--bg-secondary); border-color: var(--border-dark); } .btn-small { padding: 0.25rem 0.5rem; font-size: 0.75rem; } /* Form Elements */ .select { padding: 0.5rem; border: 1px solid var(--border-color); border-radius: var(--radius-md); background-color: var(--bg-primary); color: var(--text-primary); font-size: 0.875rem; cursor: pointer; } /* Metrics Grid */ .metrics-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--spacing-lg); margin-bottom: var(--spacing-xl); } .metric-card { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); box-shadow: var(--shadow-sm); } .metric-card.primary { border-left: 4px solid var(--primary); } .metric-card.success { border-left: 4px solid var(--success); } .metric-card.info { border-left: 4px solid var(--info); } .metric-card.warning { border-left: 4px solid var(--warning); } .metric-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-md); } .metric-header h3 { font-size: 0.875rem; font-weight: 600; color: var(--text-secondary); } .metric-trend { font-size: 0.75rem; font-weight: 600; padding: 0.25rem 0.5rem; border-radius: var(--radius-sm); } .metric-trend.up { background-color: #D1FAE5; color: var(--success-dark); } .metric-trend.down { background-color: #FEE2E2; color: var(--danger-dark); } .metric-value { display: flex; align-items: baseline; gap: var(--spacing-xs); margin-bottom: var(--spacing-md); } .metric-value .value { font-size: 2.5rem; font-weight: 700; color: var(--text-primary); } .metric-value .total, .metric-value .unit { font-size: 1rem; color: var(--text-secondary); } .metric-details { display: flex; justify-content: space-between; font-size: 0.75rem; color: var(--text-secondary); margin-bottom: var(--spacing-sm); } .status.good { color: var(--success); } .status.excellent { color: var(--success-dark); font-weight: 600; } .status.warning { color: var(--warning); } .progress-bar { width: 100%; height: 8px; background-color: var(--bg-tertiary); border-radius: var(--radius-md); overflow: hidden; } .progress { height: 100%; background-color: var(--primary); transition: width 0.3s ease; } /* Charts Grid */ .charts-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--spacing-lg); margin-bottom: var(--spacing-xl); } .chart-card.large { grid-column: 1 / -1; } .chart-card { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); box-shadow: var(--shadow-sm); } .chart-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-lg); } .chart-header h3 { font-size: 1rem; font-weight: 600; color: var(--text-primary); } .chart-actions { display: flex; gap: var(--spacing-sm); } .filter-btn { padding: 0.25rem 0.75rem; border: 1px solid var(--border-color); background: none; border-radius: var(--radius-md); font-size: 0.75rem; cursor: pointer; transition: var(--transition); } .filter-btn:hover, .filter-btn.active { background-color: var(--primary); color: var(--text-white); border-color: var(--primary); } .chart-container { position: relative; height: 300px; } .chart-card.large .chart-container { height: 400px; } /* Quick Actions */ .quick-actions { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); box-shadow: var(--shadow-sm); } .quick-actions h3 { font-size: 1.25rem; font-weight: 600; margin-bottom: var(--spacing-lg); } .actions-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--spacing-md); } .action-card { display: flex; flex-direction: column; align-items: center; gap: var(--spacing-sm); padding: var(--spacing-lg); border: 1px solid var(--border-color); border-radius: var(--radius-lg); background: none; cursor: pointer; transition: var(--transition); } .action-card:hover { background-color: var(--bg-secondary); border-color: var(--primary); transform: translateY(-2px); box-shadow: var(--shadow-md); } .action-card .icon { font-size: 2rem; } .action-card .label { font-size: 0.875rem; font-weight: 500; color: var(--text-primary); } /* Engine Cards */ .engine-details { display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); gap: var(--spacing-lg); margin-bottom: var(--spacing-xl); } .engine-card { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); box-shadow: var(--shadow-sm); } .engine-card.chatgpt { border-top: 4px solid #10A37F; } .engine-card.claude { border-top: 4px solid #8B5CF6; } .engine-card.perplexity { border-top: 4px solid #1DB954; } .engine-card.google-sge { border-top: 4px solid #4285F4; } .engine-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-lg); } .engine-info h3 { font-size: 1.5rem; font-weight: 700; margin-bottom: var(--spacing-xs); } .engine-version { font-size: 0.75rem; color: var(--text-secondary); } .engine-score { font-size: 2rem; font-weight: 700; } .engine-score .score { color: var(--primary); } .engine-score.excellent .score { color: var(--success); } .engine-score.warning .score { color: var(--warning); } .engine-metrics { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--spacing-md); margin-bottom: var(--spacing-lg); padding: var(--spacing-md); background-color: var(--bg-secondary); border-radius: var(--radius-lg); } .engine-metrics .metric { text-align: center; } .engine-metrics .metric .label { display: block; font-size: 0.75rem; color: var(--text-secondary); margin-bottom: var(--spacing-xs); } .engine-metrics .metric .value { font-size: 1.25rem; font-weight: 600; color: var(--text-primary); } .engine-metrics .metric .trend { font-size: 0.875rem; } .engine-content h4, .engine-recommendations h4 { font-size: 1rem; font-weight: 600; margin-bottom: var(--spacing-md); } .content-list { list-style: none; margin-bottom: var(--spacing-lg); } .content-list li { display: flex; justify-content: space-between; align-items: center; padding: var(--spacing-sm); border-bottom: 1px solid var(--border-color); } .content-list li:last-child { border-bottom: none; } .content-list .title { font-size: 0.875rem; font-weight: 500; color: var(--text-primary); } .content-list .citations { font-size: 0.75rem; color: var(--text-secondary); } .engine-recommendations ul { list-style: none; } .engine-recommendations li { padding: var(--spacing-sm) 0; font-size: 0.875rem; color: var(--text-primary); } /* Competitors Table */ .competitors-ranking { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); margin-bottom: var(--spacing-xl); box-shadow: var(--shadow-sm); overflow-x: auto; } .ranking-table { width: 100%; border-collapse: collapse; } .ranking-table th, .ranking-table td { padding: var(--spacing-md); text-align: left; border-bottom: 1px solid var(--border-color); } .ranking-table th { font-size: 0.75rem; font-weight: 600; color: var(--text-secondary); text-transform: uppercase; } .ranking-table td { font-size: 0.875rem; } .ranking-table tr.you { background-color: #EFF6FF; } .ranking-table tr:hover { background-color: var(--bg-secondary); } .rank { font-size: 1.25rem; } .trend.up { color: var(--success); } .trend.down { color: var(--danger); } .trend.stable { color: var(--text-secondary); } /* Opportunities */ .opportunities { margin-bottom: var(--spacing-xl); } .opportunities h3 { font-size: 1.25rem; font-weight: 600; margin-bottom: var(--spacing-lg); } .opportunity-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: var(--spacing-lg); } .opportunity-card { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); box-shadow: var(--shadow-sm); } .opportunity-card.high { border-left: 4px solid var(--danger); } .opportunity-card.medium { border-left: 4px solid var(--warning); } .opportunity-card.low { border-left: 4px solid var(--info); } .opportunity-header { display: flex; justify-content: space-between; margin-bottom: var(--spacing-md); } .opportunity-header .priority { font-size: 0.75rem; font-weight: 600; padding: 0.25rem 0.5rem; border-radius: var(--radius-sm); } .opportunity-header .priority.high { background-color: #FEE2E2; color: var(--danger-dark); } .opportunity-header .priority.medium { background-color: #FEF3C7; color: var(--warning-dark); } .opportunity-header .priority.low { background-color: #DBEAFE; color: var(--info-dark); } .opportunity-card h4 { font-size: 1rem; font-weight: 600; margin-bottom: var(--spacing-sm); } .opportunity-card p { font-size: 0.875rem; color: var(--text-secondary); margin-bottom: var(--spacing-md); } .opportunity-details { display: flex; flex-direction: column; gap: var(--spacing-xs); margin-bottom: var(--spacing-md); } .opportunity-details span { font-size: 0.75rem; color: var(--text-secondary); } /* Content Stats */ .content-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--spacing-lg); margin-bottom: var(--spacing-xl); } .stat-card { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); text-align: center; box-shadow: var(--shadow-sm); } .stat-card h3 { font-size: 0.875rem; font-weight: 600; color: var(--text-secondary); margin-bottom: var(--spacing-sm); } .stat-card .value { font-size: 2rem; font-weight: 700; color: var(--text-primary); margin-bottom: var(--spacing-xs); } .stat-card .change { font-size: 0.75rem; color: var(--text-secondary); } .stat-card .change.up { color: var(--success); } .stat-card .change.warning { color: var(--warning); } /* Content List Table */ .content-list { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); box-shadow: var(--shadow-sm); overflow-x: auto; } .data-table { width: 100%; border-collapse: collapse; } .data-table th, .data-table td { padding: var(--spacing-md); text-align: left; border-bottom: 1px solid var(--border-color); } .data-table th { font-size: 0.75rem; font-weight: 600; color: var(--text-secondary); text-transform: uppercase; } .data-table td { font-size: 0.875rem; } .data-table tr:hover { background-color: var(--bg-secondary); } .data-table a { color: var(--primary); text-decoration: none; } .data-table a:hover { text-decoration: underline; } .data-table .date { display: block; font-size: 0.75rem; color: var(--text-secondary); margin-top: var(--spacing-xs); } .badge { display: inline-block; padding: 0.25rem 0.5rem; font-size: 0.75rem; font-weight: 600; border-radius: var(--radius-sm); } .badge.guide { background-color: #DBEAFE; color: var(--info-dark); } .badge.listicle { background-color: #FEE2E2; color: var(--danger-dark); } .score-bar { width: 100%; height: 8px; background-color: var(--bg-tertiary); border-radius: var(--radius-md); overflow: hidden; } .score-bar .score { height: 100%; background-color: var(--primary); transition: width 0.3s ease; } .score-bar .score.warning { background-color: var(--warning); } .score-bar .score.good { background-color: var(--success); } /* Automation Tasks */ .automation-tasks { display: grid; gap: var(--spacing-lg); margin-bottom: var(--spacing-xl); } .task-card { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); box-shadow: var(--shadow-sm); } .task-card.active { border-left: 4px solid var(--success); } .task-card.inactive { border-left: 4px solid var(--text-secondary); opacity: 0.7; } .task-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-lg); } .task-info h3 { font-size: 1.25rem; font-weight: 600; margin-bottom: var(--spacing-xs); } .task-info .schedule { font-size: 0.875rem; color: var(--text-secondary); } .task-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--spacing-md); margin-bottom: var(--spacing-lg); padding: var(--spacing-md); background-color: var(--bg-secondary); border-radius: var(--radius-lg); } .task-stats .stat { text-align: center; } .task-stats .stat .label { display: block; font-size: 0.75rem; color: var(--text-secondary); margin-bottom: var(--spacing-xs); } .task-stats .stat .value { font-size: 1.125rem; font-weight: 600; color: var(--text-primary); } .task-actions { display: flex; gap: var(--spacing-sm); } /* Workflows */ .workflows { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); box-shadow: var(--shadow-sm); } .workflows h3 { font-size: 1.25rem; font-weight: 600; margin-bottom: var(--spacing-lg); } .workflow-item { display: flex; justify-content: space-between; align-items: center; padding: var(--spacing-md); border: 1px solid var(--border-color); border-radius: var(--radius-lg); background-color: var(--bg-secondary); } .workflow-info h4 { font-size: 1rem; font-weight: 600; margin-bottom: var(--spacing-xs); } .workflow-info p { font-size: 0.875rem; color: var(--text-secondary); } .workflow-actions { display: flex; gap: var(--spacing-sm); } /* Alert Stats */ .alert-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--spacing-lg); margin-bottom: var(--spacing-xl); } .alert-stat { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); box-shadow: var(--shadow-sm); } .alert-stat.critical { border-left: 4px solid var(--danger); } .alert-stat.warning { border-left: 4px solid var(--warning); } .alert-stat.info { border-left: 4px solid var(--info); } .alert-stat .stat-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-sm); } .alert-stat .stat-header h3 { font-size: 1rem; font-weight: 600; } .alert-stat .count { font-size: 1.5rem; font-weight: 700; } .alert-stat p { font-size: 0.875rem; color: var(--text-secondary); } /* Alerts List */ .alerts-list { display: grid; gap: var(--spacing-md); } .alert-item { background-color: var(--bg-primary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--spacing-lg); box-shadow: var(--shadow-sm); } .alert-item.warning { border-left: 4px solid var(--warning); } .alert-item.info { border-left: 4px solid var(--info); } .alert-header { margin-bottom: var(--spacing-md); } .alert-info { display: flex; justify-content: space-between; margin-bottom: var(--spacing-xs); } .alert-info .priority { font-size: 0.75rem; font-weight: 600; padding: 0.25rem 0.5rem; border-radius: var(--radius-sm); } .alert-info .time { font-size: 0.75rem; color: var(--text-secondary); } .alert-header h4 { font-size: 1rem; font-weight: 600; } .alert-body p { font-size: 0.875rem; color: var(--text-primary); margin-bottom: var(--spacing-sm); } .alert-details { display: flex; gap: var(--spacing-lg); margin-bottom: var(--spacing-md); } .alert-details span { font-size: 0.75rem; color: var(--text-secondary); } .alert-actions { display: flex; gap: var(--spacing-sm); } /* Status Bar */ .status-bar { background-color: var(--bg-primary); border-top: 1px solid var(--border-color); padding: var(--spacing-md) var(--spacing-lg); display: flex; justify-content: space-between; align-items: center; font-size: 0.75rem; } .status-left, .status-right { display: flex; gap: var(--spacing-lg); } .status-item { display: flex; align-items: center; gap: var(--spacing-xs); color: var(--text-secondary); } .status-item .icon { font-size: 1rem; } /* Loading Indicator */ .loading-indicator { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.5); display: flex; flex-direction: column; align-items: center; justify-content: center; z-index: 9999; } .loading-indicator.hidden { display: none; } .spinner { width: 50px; height: 50px; border: 4px solid var(--bg-primary); border-top-color: var(--primary); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .loading-indicator p { margin-top: var(--spacing-md); color: var(--text-white); font-size: 1rem; } /* Notification */ .notification { position: fixed; bottom: var(--spacing-xl); right: var(--spacing-xl); background-color: var(--bg-dark); color: var(--text-white); padding: var(--spacing-md) var(--spacing-lg); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); display: flex; align-items: center; gap: var(--spacing-md); z-index: 9999; max-width: 400px; } .notification.hidden { display: none; } .notification .message { flex: 1; } .notification .close-btn { background: none; border: none; color: var(--text-white); font-size: 1.5rem; cursor: pointer; padding: 0; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; border-radius: var(--radius-sm); } .notification .close-btn:hover { background-color: rgba(255, 255, 255, 0.1); } /* Responsive Design */ @media (max-width: 1024px) { .charts-grid { grid-template-columns: 1fr; } .engine-details { grid-template-columns: 1fr; } } @media (max-width: 768px) { .nav-container { flex-direction: column; align-items: stretch; } .nav-menu { overflow-x: auto; padding-bottom: var(--spacing-sm); } .nav-actions { flex-direction: column; } .metrics-grid { grid-template-columns: 1fr; } .task-stats { grid-template-columns: repeat(2, 1fr); } } /* Print Styles */ @media print { .navbar, .status-bar, .quick-actions, .task-actions, .workflow-actions, .alert-actions, .chart-actions { display: none; } .main-content { padding: 0; } .metric-card, .chart-card, .task-card, .alert-item { break-inside: avoid; } }