body>.container{padding:60px 15px 0}.navbar-nav>li.dropdown:hover>.dropdown-menu{display:block}tbody.jobs-list tr{cursor:pointer}.progress{margin-bottom:auto}pre{max-height:200px;overflow:auto}.ops-hosts{padding:15px;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;font-size:13px;background:#f5f5f5}.ops-header{background:white;border:1px solid #ddd;padding:12px 15px;margin-bottom:15px;display:flex;justify-content:space-between;align-items:center}.ops-header h1{font-size:18px;font-weight:600;margin:0;color:#333}.ops-header h1 .count{display:inline-block;background:#666;color:white;padding:2px 8px;border-radius:3px;font-size:12px;margin-left:8px}.ops-stats{display:flex;gap:15px}.ops-stats .stat{font-size:12px;font-weight:500;padding:4px 10px;border-radius:3px;background:#f0f0f0}.ops-stats .stat-success{background:#d4edda;color:#155724}.ops-stats .stat-danger{background:#f8d7da;color:#721c24}.host-row{background:white;border:1px solid #ddd;margin-bottom:10px}.host-row.host-active{border-left:3px solid #28a745}.host-row.host-shutdown{border-left:3px solid #dc3545;opacity:0.6}.host-row.host-warning{border-left:3px solid #ffc107}.host-header{display:flex;justify-content:space-between;align-items:center;padding:10px 15px;background:#fafafa;border-bottom:1px solid #eee}.host-id{display:flex;gap:12px;align-items:center}.host-id strong,.host-id .host-link{font-size:14px;color:#333;font-weight:600;text-decoration:none}.host-id .host-link:hover{color:#007bff;text-decoration:underline}.host-id .ec2-link{font-size:11px;padding:2px 6px;background:#007bff;color:white;border-radius:3px;text-decoration:none;font-weight:normal}.host-id .ec2-link:hover{background:#0056b3}.host-id span{font-size:11px;padding:2px 6px;background:#e9ecef;border-radius:3px;color:#666}.host-metrics{display:flex;gap:15px;font-size:12px}.host-metrics .metric{color:#666}.host-metrics .metric-ok{color:#28a745;font-weight:500}.host-metrics .metric-warn{color:#ffc107;font-weight:500}.host-actions .btn-ops{padding:4px 10px;font-size:11px;border:1px solid #ddd;background:white;border-radius:3px;cursor:pointer;text-decoration:none;color:#333}.host-actions .btn-ops-danger{border-color:#dc3545;color:#dc3545}.host-actions .btn-ops-danger:hover{background:#dc3545;color:white}.workers-table{width:100%;border-collapse:collapse;font-size:12px}.workers-table thead{background:#f8f9fa}.workers-table th{padding:8px 12px;text-align:left;font-weight:600;color:#495057;border-bottom:2px solid #dee2e6}.workers-table td{padding:8px 12px;border-bottom:1px solid #f0f0f0}.workers-table tr:hover{background:#f8f9fa}.workers-table tr.worker-stale{background:#fff3cd}.workers-table .td-worker code{font-size:11px;background:#f4f4f4;padding:2px 5px;border-radius:2px}.workers-table .td-job .job-link{color:#007bff;text-decoration:none;font-family:monospace}.workers-table .td-job .job-link:hover{text-decoration:underline}.workers-table .td-job .idle{color:#999;font-style:italic}.workers-table .progress-bar{position:relative;width:80px;height:16px;background:#e9ecef;border-radius:2px;overflow:hidden;display:flex;align-items:center}.workers-table .progress-fill{position:absolute;left:0;top:0;height:100%;background:#28a745;transition:width 0.3s ease}.workers-table .progress-bar span{position:relative;z-index:1;font-size:10px;line-height:16px;padding:0 5px;font-weight:600;color:white;text-shadow:0 0 3px rgba(0,0,0,0.5);width:100%;text-align:center}.workers-table .status-badge{display:inline-block;padding:2px 6px;border-radius:2px;font-size:10px;font-weight:600;text-transform:uppercase}.workers-table .badge-ok{background:#d4edda;color:#155724}.workers-table .badge-warn{background:#fff3cd;color:#856404}.workers-table .badge-err{background:#f8d7da;color:#721c24}.no-workers{padding:20px;text-align:center;color:#999;font-style:italic}.ops-job{padding:15px;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;font-size:13px;background:#f5f5f5}.ops-job-header{background:white;border:1px solid #ddd;padding:12px 15px;margin-bottom:15px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:15px}.job-title{display:flex;gap:12px;align-items:center}.job-timing{display:flex;gap:20px;align-items:center;flex:1;justify-content:center}.timing-item{display:flex;flex-direction:column;align-items:center;gap:2px}.timing-label{font-size:10px;color:#666;text-transform:uppercase;font-weight:600}.timing-value{font-size:12px;color:#333;font-weight:600}.job-title h1{font-size:18px;font-weight:600;margin:0;display:flex;gap:8px;align-items:center}.job-title code{background:#f4f4f4;padding:4px 8px;border-radius:3px;font-size:14px;color:#0066cc}.job-host{font-size:12px;color:#666;font-weight:normal}.job-host .host-link{color:#0066cc;text-decoration:none;font-weight:600;font-family:monospace}.job-host .host-link:hover{text-decoration:underline}.job-state{font-size:11px;padding:4px 10px;border-radius:3px;font-weight:600;text-transform:uppercase}.state-pending{background:#fff3cd;color:#856404}.state-downloading,.state-downloaded,.state-processing,.state-uploading,.state-uploaded{background:#d1ecf1;color:#0c5460}.state-completed{background:#d4edda;color:#155724}.state-failed{background:#f8d7da;color:#721c24}.job-actions .btn-ops{padding:4px 10px;font-size:11px;border:1px solid #ddd;background:white;border-radius:3px;cursor:pointer;text-decoration:none;color:#333}.job-actions .btn-ops-danger{border-color:#dc3545;color:#dc3545}.job-actions .btn-ops-danger:hover{background:#dc3545;color:white}.job-progress{background:white;border:1px solid #ddd;padding:15px;margin-bottom:15px}.progress-bar-full{position:relative;background:#e9ecef;height:30px;border-radius:3px;overflow:hidden;display:flex;align-items:center;justify-content:center}.progress-fill{position:absolute;left:0;top:0;height:100%;background:#28a745;transition:width 0.3s ease}.progress-fill.fill-failed{background:#dc3545}.progress-fill.fill-completed{background:#28a745}.progress-text{position:relative;z-index:1;font-weight:600;font-size:12px;color:white;text-shadow:0 0 3px rgba(0,0,0,0.5)}.job-details{background:white;border:1px solid #ddd;margin-bottom:15px}.detail-row{display:flex;padding:10px 15px;border-bottom:1px solid #f0f0f0}.detail-row:last-child{border-bottom:none}.detail-label{width:150px;font-weight:600;color:#666;flex-shrink:0}.detail-value{flex:1;color:#333}.job-section{background:white;border:1px solid #ddd;margin-bottom:15px}.job-section h2{font-size:14px;font-weight:600;padding:12px 15px;margin:0;background:#f8f9fa;border-bottom:1px solid #ddd;display:flex;justify-content:space-between;align-items:center}.job-section h2 .count{background:#666;color:white;padding:2px 8px;border-radius:3px;font-size:11px}.detail-grid{padding:15px}.detail-grid .detail-row{border-bottom:1px solid #f0f0f0}.video-details-grid{padding:15px;display:grid;grid-template-columns:repeat(3, 1fr);gap:12px}.detail-item{display:flex;flex-direction:column;gap:4px}.detail-item .detail-label{font-size:10px;color:#666;text-transform:uppercase;font-weight:600}.detail-item .detail-value{font-size:12px;color:#333;font-weight:500}.data-table{width:100%;border-collapse:collapse;font-size:12px}.data-table thead{background:#f8f9fa}.data-table th{padding:8px 12px;text-align:left;font-weight:600;color:#495057;border-bottom:2px solid #dee2e6}.data-table td{padding:8px 12px;border-bottom:1px solid #f0f0f0}.data-table tr:hover{background:#f8f9fa}.data-table code{background:#f4f4f4;padding:2px 5px;border-radius:2px;font-size:11px}.progress-bar-inline{position:relative;width:100px;height:18px;background:#e9ecef;border-radius:2px;overflow:hidden;display:flex;align-items:center;justify-content:center}.progress-bar-inline .progress-fill{position:absolute;left:0;top:0;height:100%;background:#28a745;transition:width 0.3s ease}.progress-bar-inline span{position:relative;z-index:1;font-size:10px;font-weight:600;padding:0 5px;line-height:18px;color:white;text-shadow:0 0 3px rgba(0,0,0,0.5)}.status-badge{display:inline-block;padding:3px 8px;border-radius:3px;font-size:10px;font-weight:600;text-transform:uppercase}.badge-pending{background:#fff3cd;color:#856404}.badge-completed{background:#d4edda;color:#155724}.badge-failed{background:#f8d7da;color:#721c24}.alert-box{padding:10px 12px;margin:10px 15px;border-radius:3px;border-left:3px solid}.alert-warning{background:#fff3cd;border-color:#ffc107;color:#856404}.empty{padding:20px 15px;text-align:center;color:#999;font-style:italic}.output-row{border:1px solid #ddd;margin-bottom:15px;background:white}.output-row.output-completed{border-left:3px solid #28a745}.output-row.output-processing{border-left:3px solid #0c5460}.output-row .output-header{background:#f8f9fa;padding:10px 15px;border-bottom:1px solid #ddd;display:flex;justify-content:space-between;align-items:center;cursor:pointer;transition:background 0.2s ease;gap:15px}.output-row .output-header:hover{background:#e9ecef}.output-row .output-info{display:flex;gap:10px;align-items:center;min-width:200px;flex-shrink:0}.output-row .output-meta-inline{display:flex;gap:10px;min-width:200px;flex-shrink:0}.output-row .output-progress-inline{display:flex;gap:15px;min-width:240px;flex-shrink:0}.progress-mini{display:flex;flex-direction:column;gap:3px;min-width:100px}.progress-mini .progress-label{font-size:9px;color:#666;text-transform:uppercase;font-weight:600}.progress-mini .progress-bar-inline{width:100px;height:16px}.progress-mini .progress-bar-inline span{font-size:9px}.output-row .output-status{display:flex;align-items:center;gap:8px;min-width:120px;flex-shrink:0;justify-content:flex-end}.toggle-icon{font-size:10px;color:#666;width:12px;display:inline-block}.output-details{border-top:1px solid #f0f0f0}.output-row .output-info strong{font-size:13px;color:#333}.output-row .output-info code{background:#f4f4f4;padding:2px 6px;border-radius:2px;font-size:11px}.output-row .data-table{margin-bottom:0}.output-row .progress-bar-inline .fill-upload{background:#28a745}.output-meta{padding:10px 15px;background:#f8f9fa;display:flex;gap:15px;border-top:1px solid #f0f0f0}.meta-chip{font-size:11px;color:#666}.thumbnails-section{padding:15px;display:flex;gap:10px;flex-wrap:wrap;background:#fafafa;border-top:1px solid #f0f0f0}.thumbnail-img{width:120px;height:auto;border:1px solid #ddd;border-radius:3px}.thumbnail-img:hover{border-color:#007bff}.video-section{padding:15px;background:#000;border-top:1px solid #f0f0f0}.video-player{width:100%;max-height:400px}.command-section{padding:15px;background:#fafafa;border-top:1px solid #f0f0f0}.command-label{font-size:11px;font-weight:600;color:#666;margin-bottom:8px;text-transform:uppercase}.command-pre{background:#2d2d2d;color:#f8f8f2;padding:10px;border-radius:3px;font-size:11px;overflow-x:auto;margin:0;white-space:pre-wrap;word-break:break-all}.ops-logs{padding:20px}.ops-logs .log-viewer{background:#1e1e1e;border:1px solid #333;border-radius:4px;margin-top:20px;max-height:calc(100vh - 200px);overflow-y:auto}.ops-logs .log-viewer .log-content{color:#d4d4d4;font-family:'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace;font-size:12px;line-height:1.4;margin:0;padding:15px;white-space:pre-wrap;word-wrap:break-word;background:transparent;border:none;max-height:none;overflow:visible}.ops-logs .alert{margin-top:20px}
