/* ======================================== AE Anons - Nexrender Job Manager Styles ======================================== */ /* CSS Variables - Light Theme (default) */ :root { --bg-primary: #ffffff; --bg-secondary: #fafafa; --bg-tertiary: #f3f0f7; --text-primary: #1a1a1a; --text-secondary: #6b4f7c; --border-color: #e0d4e8; --accent-primary: #7c3aed; --accent-secondary: #c2410c; --accent-success: #10b981; --accent-warning: #ea580c; --accent-danger: #ef4444; --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1); --header-bg: #7c3aed; --header-text: #ffffff; } /* Dark Theme */ [data-theme="dark"] { --bg-primary: #1a1025; --bg-secondary: #251a30; --bg-tertiary: #352545; --text-primary: #f0e6ff; --text-secondary: #c4a6d9; --border-color: #4a3560; --accent-primary: #a78bfa; --accent-secondary: #f59e0b; --accent-success: #34d399; --accent-warning: #fbbf24; --accent-danger: #f87171; --header-bg: #a78bfa; --header-text: #1a1025; } /* Reset & Base */ * { margin: 0; padding: 0; box-sizing: border-box; transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease; } body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--bg-primary); color: var(--text-primary); line-height: 1.6; min-height: 100vh; } .container { max-width: 100%; margin: 0 auto; padding: 24px; } /* Header */ .header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 24px; flex-wrap: wrap; gap: 16px; } .header-left { display: flex; align-items: center; gap: 16px; } .logo-container { width: 48px; height: 48px; border-radius: 12px; background: var(--accent-primary); display: flex; align-items: center; justify-content: center; overflow: hidden; box-shadow: var(--shadow-md); } .logo { width: 100%; height: 100%; object-fit: cover; } .logo-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; color: white; font-size: 24px; font-weight: bold; } .header h1 { font-size: 28px; font-weight: 600; color: var(--accent-primary); letter-spacing: -0.5px; } .header-controls { display: flex; align-items: center; gap: 12px; } .theme-toggle { background: var(--bg-secondary); border: 2px solid var(--accent-primary); border-radius: 24px; padding: 8px 16px; display: flex; align-items: center; gap: 8px; cursor: pointer; color: var(--text-primary); font-size: 14px; box-shadow: var(--shadow-sm); } .theme-toggle:hover { box-shadow: var(--shadow-md); } /* Action Bar */ .action-bar { background: var(--bg-secondary); border-radius: 12px; padding: 20px; margin-bottom: 24px; box-shadow: var(--shadow-md); display: flex; align-items: center; gap: 12px; flex-wrap: wrap; border: 1px solid var(--border-color); } /* Buttons */ .btn { padding: 10px 20px; border: none; border-radius: 8px; font-size: 14px; font-weight: 500; cursor: pointer; display: inline-flex; align-items: center; gap: 8px; transition: all 0.2s ease; background: var(--bg-tertiary); color: var(--text-primary); border: 1px solid var(--border-color); position: relative; overflow: hidden; } .btn::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(255, 255, 255, 0.1); opacity: 0; transition: opacity 0.2s; } .btn:hover::before { opacity: 1; } .btn:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); } .btn i { font-size: 14px; } /* Generate - Purple */ .btn-primary { background: linear-gradient(135deg, #7c3aed 0%, #8b5cf6 100%); color: white; border: none; box-shadow: 0 2px 8px rgba(124, 58, 237, 0.3); } [data-theme="dark"] .btn-primary { background: linear-gradient(135deg, #8b5cf6 0%, #a78bfa 100%); color: #1a1025; box-shadow: 0 2px 8px rgba(139, 92, 246, 0.4); } .btn-primary:hover { box-shadow: 0 4px 12px rgba(124, 58, 237, 0.4); } /* Stop - Orange */ .btn-warning { background: linear-gradient(135deg, #ea580c 0%, #f97316 100%); color: white; border: none; box-shadow: 0 2px 8px rgba(234, 88, 12, 0.3); } [data-theme="dark"] .btn-warning { background: linear-gradient(135deg, #f97316 0%, #fb923c 100%); color: #1a1025; box-shadow: 0 2px 8px rgba(249, 115, 22, 0.4); } .btn-warning:hover { box-shadow: 0 4px 12px rgba(234, 88, 12, 0.4); } /* Cleanup - Plum */ .btn-danger { background: linear-gradient(135deg, #9d174d 0%, #be185d 100%); color: white; border: none; box-shadow: 0 2px 8px rgba(157, 23, 77, 0.3); } [data-theme="dark"] .btn-danger { background: linear-gradient(135deg, #be185d 0%, #db2777 100%); color: #f0e6ff; box-shadow: 0 2px 8px rgba(190, 24, 93, 0.4); } .btn-danger:hover { box-shadow: 0 4px 12px rgba(157, 23, 77, 0.4); } /* Refresh - Outline */ .btn-outline { background: transparent; border: 2px solid #7c3aed; color: #7c3aed; box-shadow: none; } [data-theme="dark"] .btn-outline { border-color: #a78bfa; color: #a78bfa; } .btn-outline:hover { background: #7c3aed; color: white; border-color: #7c3aed; } [data-theme="dark"] .btn-outline:hover { background: #a78bfa; color: #1a1025; border-color: #a78bfa; } /* Status Message */ .status-message { margin-left: auto; padding: 8px 16px; background: var(--bg-tertiary); border-radius: 20px; font-size: 14px; color: var(--text-secondary); display: flex; align-items: center; gap: 8px; } /* Stats Cards */ .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 16px; margin-bottom: 24px; } .stat-card { background: var(--bg-secondary); border-radius: 12px; padding: 20px; box-shadow: var(--shadow-sm); border: 1px solid var(--border-color); } .stat-card h3 { font-size: 14px; color: var(--text-secondary); margin-bottom: 8px; font-weight: 500; } .stat-card .value { font-size: 32px; font-weight: 700; color: var(--accent-primary); } /* Filter Bar */ .filter-bar { margin-bottom: 20px; display: flex; gap: 12px; align-items: center; } .search-wrapper { flex: 1; position: relative; } .search-wrapper i { position: absolute; left: 16px; top: 50%; transform: translateY(-50%); color: var(--text-secondary); } .search-input { width: 100%; padding: 12px 16px 12px 44px; background: var(--bg-secondary); border: 2px solid var(--border-color); border-radius: 24px; color: var(--text-primary); font-size: 14px; } .search-input:focus { outline: none; border-color: var(--accent-primary); box-shadow: 0 0 0 3px rgba(124, 58, 237, 0.1); } .auto-refresh-badge { display: flex; align-items: center; gap: 8px; padding: 8px 16px; background: var(--bg-tertiary); border-radius: 20px; font-size: 13px; color: var(--text-secondary); border: 1px solid var(--border-color); } /* Table */ .table-container { background: var(--bg-secondary); border-radius: 12px; box-shadow: var(--shadow-lg); overflow-x: auto; border: 1px solid var(--border-color); } table { width: 100%; border-collapse: collapse; table-layout: auto; min-width: 800px; } th { text-align: left; padding: 16px; background: var(--header-bg); color: var(--header-text); font-weight: 600; font-size: 13px; text-transform: uppercase; letter-spacing: 0.5px; white-space: nowrap; cursor: pointer; user-select: none; position: relative; } th:hover { opacity: 0.9; } th i { margin-left: 8px; font-size: 12px; opacity: 0.7; } th.sorted-asc i, th.sorted-desc i { opacity: 1; } td { padding: 12px 16px; border-bottom: 1px solid var(--border-color); color: var(--text-primary); vertical-align: middle; } tr:last-child td { border-bottom: none; } tr:hover { background: var(--bg-tertiary); } /* Job Filename */ .job-filename { font-family: 'Monaco', 'Menlo', 'Cascadia Code', 'Consolas', monospace; font-size: 13px; font-weight: 500; line-height: 1.5; word-break: break-word; white-space: normal; max-width: 100%; color: var(--text-primary); } /* Badges */ .badge { padding: 4px 12px; border-radius: 20px; font-size: 12px; font-weight: 600; display: inline-block; white-space: nowrap; } .badge-finished { background: rgba(16, 185, 129, 0.15); color: var(--accent-success); border: 1px solid rgba(16, 185, 129, 0.3); } .badge-started, .badge-processing { background: rgba(124, 58, 237, 0.15); color: var(--accent-primary); border: 1px solid rgba(124, 58, 237, 0.3); } .badge-queued { background: rgba(234, 88, 12, 0.15); color: var(--accent-warning); border: 1px solid rgba(234, 88, 12, 0.3); } .badge-error { background: rgba(239, 68, 68, 0.15); color: var(--accent-danger); border: 1px solid rgba(239, 68, 68, 0.3); } .badge-pending { background: rgba(245, 158, 11, 0.15); color: var(--accent-secondary); border: 1px solid rgba(245, 158, 11, 0.3); } /* Date & Time */ .datetime { font-family: 'Monaco', 'Menlo', monospace; font-size: 12px; color: var(--text-secondary); white-space: nowrap; } .uid { font-family: 'Monaco', 'Menlo', monospace; font-size: 11px; color: var(--text-secondary); white-space: nowrap; } /* Empty State */ .empty-state { text-align: center; padding: 60px 20px; color: var(--text-secondary); } .empty-state i { font-size: 48px; margin-bottom: 16px; opacity: 0.5; color: var(--accent-primary); } /* Loading Spinner */ .spinner { width: 20px; height: 20px; border: 3px solid var(--border-color); border-top-color: var(--accent-primary); border-radius: 50%; animation: spin 1s linear infinite; display: inline-block; } @keyframes spin { to { transform: rotate(360deg); } } /* Responsive */ @media (max-width: 768px) { .container { padding: 16px; } .header { flex-direction: column; align-items: flex-start; } .header-left { flex-wrap: wrap; } .header h1 { font-size: 20px; } .action-bar { flex-direction: column; align-items: stretch; } .status-message { margin-left: 0; } } /* Модальное окно плеера */ .modal { display: none; position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: rgba(0, 0, 0, 0.8); align-items: center; justify-content: center; z-index: 1000; } .modal.active { display: flex; } .modal-content { background: var(--bg-secondary); border-radius: 12px; padding: 20px; max-width: 90vw; box-shadow: var(--shadow-lg); position: relative; } .modal .close { position: absolute; top: 8px; right: 16px; font-size: 28px; color: var(--text-primary); cursor: pointer; line-height: 1; } /* Кнопки в таблице (уменьшенный размер) */ .btn-sm { padding: 4px 8px; font-size: 12px; gap: 4px; }