/* ========================================== Content Agent Dashboard — Premium Dark Mode ========================================== */ :root { --bg-primary: #f8fafc; --bg-secondary: #ffffff; --bg-card: #ffffff; --bg-card-hover: #f1f5f9; --bg-input: #ffffff; --border: #e2e8f0; --border-focus: #6366f1; --text-primary: #0f172a; --text-secondary: #475569; --text-muted: #94a3b8; --accent: #6366f1; --accent-hover: #4f46e5; --accent-glow: rgba(99, 102, 241, 0.1); --success: #10b981; --warning: #f59e0b; --danger: #ef4444; --info: #3b82f6; --radius: 12px; --radius-sm: 8px; --shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --transition: all 0.2s ease-in-out; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: var(--bg-primary); color: var(--text-primary); min-height: 100vh; line-height: 1.6; } /* ── Header ── */ .header { display: flex; align-items: center; justify-content: space-between; padding: 16px 32px; background: var(--bg-secondary); border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 100; backdrop-filter: blur(20px); } .header-left { display: flex; align-items: center; gap: 16px; } .header-right { display: flex; align-items: center; gap: 16px; } .logo { display: flex; align-items: center; gap: 10px; } .logo-icon { font-size: 28px; } .logo-text { font-size: 20px; font-weight: 700; background: linear-gradient(135deg, #4f46e5, #9333ea); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; letter-spacing: -0.5px; } .agent-status { display: flex; align-items: center; gap: 8px; padding: 8px 16px; background: var(--bg-card); border-radius: 100px; border: 1px solid var(--border); font-size: 13px; color: var(--text-secondary); } .status-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--danger); transition: var(--transition); } .agent-status.active .status-dot { background: var(--success); box-shadow: 0 0 8px rgba(34, 197, 94, 0.6); animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* ── Buttons ── */ .btn { display: inline-flex; align-items: center; gap: 8px; padding: 10px 20px; border: none; border-radius: var(--radius-sm); font-family: inherit; font-size: 14px; font-weight: 600; cursor: pointer; transition: var(--transition); white-space: nowrap; } .btn:hover { transform: translateY(-1px); } .btn:active { transform: translateY(0); } .badge-instagram, .badge-social { background: linear-gradient(45deg, #f09433 0%, #e6683c 25%, #dc2743 50%, #cc2366 75%, #bc1888 100%); color: white; } .btn-primary { background: linear-gradient(135deg, #6366f1, #7c3aed); color: white; box-shadow: 0 4px 15px rgba(99, 102, 241, 0.3); } .btn-primary:hover { box-shadow: 0 6px 20px rgba(99, 102, 241, 0.5); } .btn-lg { padding: 14px 32px; font-size: 16px; border-radius: var(--radius); width: 100%; justify-content: center; } .btn-sm { padding: 6px 12px; font-size: 12px; } .btn-danger { background: rgba(239, 68, 68, 0.15); color: var(--danger); border: 1px solid rgba(239, 68, 68, 0.3); } .btn-danger:hover { background: rgba(239, 68, 68, 0.25); } .btn-success { background: rgba(34, 197, 94, 0.15); color: var(--success); border: 1px solid rgba(34, 197, 94, 0.3); } .btn-success:hover { background: rgba(34, 197, 94, 0.25); } .btn-info { background: rgba(59, 130, 246, 0.15); color: var(--info); border: 1px solid rgba(59, 130, 246, 0.3); } .btn-info:hover { background: rgba(59, 130, 246, 0.25); } .btn-agent-toggle { background: rgba(34, 197, 94, 0.15); color: var(--success); border: 1px solid rgba(34, 197, 94, 0.3); } .btn-agent-toggle.running { background: rgba(239, 68, 68, 0.15); color: var(--danger); border: 1px solid rgba(239, 68, 68, 0.3); } /* ── Main Layout ── */ .main { max-width: 1200px; margin: 0 auto; padding: 24px 32px; } /* ── Stats Grid ── */ .stats-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 24px; } .stat-card { display: flex; align-items: center; gap: 16px; padding: 20px 24px; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); transition: var(--transition); box-shadow: var(--shadow); } .stat-card:hover { border-color: var(--border-focus); box-shadow: 0 0 20px var(--accent-glow); transform: translateY(-2px); } .stat-icon { font-size: 32px; width: 52px; height: 52px; display: flex; align-items: center; justify-content: center; background: rgba(99, 102, 241, 0.1); border-radius: var(--radius-sm); } .stat-info { display: flex; flex-direction: column; } .stat-value { font-size: 28px; font-weight: 800; letter-spacing: -1px; line-height: 1.1; } .stat-label { font-size: 12px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 1px; font-weight: 500; } /* ── Tabs ── */ .tabs { display: flex; gap: 4px; margin-bottom: 20px; border-bottom: 1px solid var(--border); padding-bottom: 0; } .tab { padding: 12px 20px; background: transparent; border: none; color: var(--text-muted); font-family: inherit; font-size: 14px; font-weight: 500; cursor: pointer; transition: var(--transition); border-bottom: 2px solid transparent; margin-bottom: -1px; } .tab:hover { color: var(--text-primary); } .tab.active { color: var(--accent); border-bottom-color: var(--accent); } .tab-content { display: none; } .tab-content.active { display: block; animation: fadeIn 0.3s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } /* ── Cards ── */ .card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 24px; box-shadow: var(--shadow); } .card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; flex-wrap: wrap; gap: 12px; } .card-title { font-size: 18px; font-weight: 700; margin-bottom: 4px; } .card-subtitle { font-size: 13px; color: var(--text-muted); margin-bottom: 20px; } /* ── Forms ── */ .form-group { margin-bottom: 16px; } .form-group label { display: block; font-size: 13px; font-weight: 600; color: var(--text-secondary); margin-bottom: 6px; text-transform: uppercase; letter-spacing: 0.5px; } .label-hint { font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--text-muted); } .input { width: 100%; padding: 12px 16px; background: var(--bg-input); border: 1px solid var(--border); border-radius: var(--radius-sm); color: var(--text-primary); font-family: inherit; font-size: 14px; transition: var(--transition); } .input:focus { outline: none; border-color: var(--border-focus); box-shadow: 0 0 0 3px var(--accent-glow); } .textarea { resize: vertical; min-height: 100px; } select.input { cursor: pointer; appearance: none; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%239ca3c0' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); background-position: right 12px center; background-repeat: no-repeat; background-size: 20px; padding-right: 40px; } .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } /* ── Mode Selector ── */ .mode-selector { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; } .mode-option { cursor: pointer; } .mode-option input { display: none; } .mode-card { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 20px; background: var(--bg-input); border: 2px solid var(--border); border-radius: var(--radius); transition: var(--transition); text-align: center; } .mode-option input:checked+.mode-card { border-color: var(--accent); background: rgba(99, 102, 241, 0.05); box-shadow: 0 0 20px var(--accent-glow); } .mode-icon { font-size: 32px; } .mode-name { font-weight: 700; font-size: 15px; } .mode-desc { font-size: 12px; color: var(--text-muted); } /* ── Tables ── */ .table-wrap { overflow-x: auto; margin-top: 16px; } .table { width: 100%; border-collapse: collapse; } .table th { text-align: left; padding: 12px 16px; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 1px; color: var(--text-muted); border-bottom: 1px solid var(--border); } .table td { padding: 12px 16px; font-size: 13px; border-bottom: 1px solid rgba(42, 49, 80, 0.5); color: var(--text-secondary); max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .table tr:hover td { background: rgba(99, 102, 241, 0.03); } .empty-state { text-align: center !important; padding: 40px 16px !important; color: var(--text-muted) !important; font-style: italic; } /* ── Status Badges ── */ .badge { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; border-radius: 100px; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; } .badge-pending { background: rgba(245, 158, 11, 0.15); color: var(--warning); } .badge-running { background: rgba(59, 130, 246, 0.15); color: var(--info); animation: pulse 1.5s ease-in-out infinite; } .badge-done { background: rgba(34, 197, 94, 0.15); color: var(--success); } .badge-failed { background: rgba(239, 68, 68, 0.15); color: var(--danger); } .badge-review, .badge-manual { background: rgba(245, 158, 11, 0.15); color: var(--warning); } .badge-posted { background: rgba(34, 197, 94, 0.15); color: var(--success); } .badge-needs_attention { background: rgba(239, 68, 68, 0.15); color: var(--danger); } .badge-comment_failed { background: rgba(239, 68, 68, 0.15); color: var(--danger); } .badge-comment_pending { background: rgba(59, 130, 246, 0.15); color: var(--info); } .badge-partly_posted { background: rgba(59, 130, 246, 0.15); color: var(--info); } .badge-article { background: rgba(139, 92, 246, 0.15); color: #a78bfa; } .badge-instagram { background: rgba(236, 72, 153, 0.15); color: #f472b6; } .badge-upload { background: rgba(99, 102, 241, 0.15); color: #818cf8; } .badge-upload_video, .badge-upload_image { background: rgba(14, 165, 233, 0.15); color: #0284c7; } .badge-facebook_page { background: rgba(24, 119, 242, 0.15); color: #1877f2; } .badge-facebook_group { background: rgba(16, 185, 129, 0.15); color: #059669; } /* ── Upload Zone ── */ .upload-zone { border: 2px dashed var(--border); border-radius: var(--radius); padding: 40px 24px; text-align: center; cursor: pointer; transition: var(--transition); background: var(--bg-input); } .upload-zone:hover { border-color: var(--accent); background: rgba(99, 102, 241, 0.03); } .upload-zone.drag-over { border-color: var(--accent); background: rgba(99, 102, 241, 0.08); box-shadow: 0 0 20px var(--accent-glow); } .upload-zone-icon { font-size: 48px; margin-bottom: 12px; } .upload-zone-text { font-size: 14px; color: var(--text-secondary); margin-bottom: 4px; } .upload-zone-browse { color: var(--accent); font-weight: 600; text-decoration: underline; } .upload-zone-hint { font-size: 12px; color: var(--text-muted); } .upload-file-info { display: flex; align-items: center; justify-content: space-between; padding: 10px 16px; background: rgba(99, 102, 241, 0.06); border: 1px solid rgba(99, 102, 241, 0.2); border-radius: var(--radius-sm); margin-top: 10px; font-size: 13px; color: var(--text-secondary); } .upload-file-name { font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .upload-file-remove { background: none; border: none; color: var(--danger); font-size: 20px; cursor: pointer; padding: 0 4px; line-height: 1; } .upload-progress { height: 6px; background: var(--bg-input); border-radius: 3px; margin-top: 10px; overflow: hidden; border: 1px solid var(--border); } .upload-progress-bar { height: 100%; width: 0%; background: linear-gradient(135deg, #6366f1, #7c3aed); border-radius: 3px; transition: width 0.3s ease; } /* ── Filter Buttons ── */ .filter-group { display: flex; gap: 4px; } .filter-btn { padding: 6px 14px; background: transparent; border: 1px solid var(--border); border-radius: 100px; color: var(--text-muted); font-family: inherit; font-size: 12px; font-weight: 500; cursor: pointer; transition: var(--transition); } .filter-btn:hover { border-color: var(--text-secondary); color: var(--text-secondary); } .filter-btn.active { background: var(--accent); border-color: var(--accent); color: white; } /* ── Feed Form ── */ .feed-form { display: grid; grid-template-columns: 1fr 2fr auto; gap: 12px; margin-bottom: 16px; } /* ── Settings ── */ .settings-section { margin-bottom: 28px; padding-bottom: 24px; border-bottom: 1px solid var(--border); } .settings-section:last-of-type { border-bottom: none; } .settings-heading { font-size: 15px; font-weight: 700; margin-bottom: 16px; color: var(--text-primary); } /* ── Social Publishing ── */ .social-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .social-wide { grid-column: 1 / -1; } .target-form { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .target-form-wide { grid-column: 1 / -1; } .social-table td { white-space: normal; vertical-align: top; } .social-actions { display: flex; flex-wrap: wrap; gap: 6px; min-width: 260px; } .social-error { color: var(--danger); font-size: 11px; margin-top: 4px; max-width: 260px; } /* ── Toast Notifications ── */ .toast-container { position: fixed; bottom: 24px; right: 24px; display: flex; flex-direction: column; gap: 8px; z-index: 1000; } .toast { padding: 14px 20px; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-sm); box-shadow: var(--shadow); font-size: 14px; display: flex; align-items: center; gap: 10px; animation: slideIn 0.3s ease; max-width: 400px; backdrop-filter: blur(20px); } .toast-success { border-left: 3px solid var(--success); } .toast-error { border-left: 3px solid var(--danger); } .toast-info { border-left: 3px solid var(--info); } @keyframes slideIn { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: translateX(0); } } /* ── Responsive ── */ @media (max-width: 768px) { .header { padding: 12px 16px; } .main { padding: 12px 16px; } .stats-grid { grid-template-columns: 1fr; } .stat-card { padding: 16px; } .tab { padding: 10px 12px; font-size: 13px; } .form-row { grid-template-columns: 1fr; } .mode-selector { grid-template-columns: 1fr; } .feed-form { grid-template-columns: 1fr; } .social-grid, .target-form { grid-template-columns: 1fr; } .target-form-wide { grid-column: auto; } .tabs { overflow-x: auto; white-space: nowrap; -webkit-overflow-scrolling: touch; } } @media (max-width: 480px) { .header-right { gap: 8px; } .agent-status { padding: 6px 10px; } .status-label { display: none; } .logo-text { font-size: 16px; } } /* ── Link Styles ── */ a { color: var(--accent); text-decoration: none; transition: var(--transition); } a:hover { color: var(--accent-hover); text-decoration: underline; }