/** * Preview Manager Styles */ /* Preview Panel */ .preview-panel { position: fixed; bottom: 0; right: 0; left: 0; height: 60vh; background: #1e1e1e; border-top: 2px solid #333; display: flex; flex-direction: column; z-index: 1000; box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.3); } .preview-header { display: flex; justify-content: space-between; align-items: center; padding: 12px 20px; background: #252525; border-bottom: 1px solid #333; } .preview-title { display: flex; align-items: center; gap: 12px; } .preview-title h3 { margin: 0; font-size: 16px; color: #e0e0e0; } .preview-url { font-size: 12px; color: #888; background: #1a1a1a; padding: 4px 8px; border-radius: 4px; font-family: monospace; } .preview-actions { display: flex; gap: 8px; } .preview-content { flex: 1; position: relative; background: #fff; } #preview-iframe { width: 100%; height: 100%; border: none; } .preview-status { padding: 8px 20px; background: #1a1a1a; border-top: 1px solid #333; display: flex; align-items: center; gap: 8px; font-size: 13px; color: #888; } .status-dot { width: 8px; height: 8px; border-radius: 50%; animation: pulse 2s ease-in-out infinite; } .status-running { background: #51cf66; } .status-stopped { background: #ff6b6b; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* Preview Error */ .preview-error { position: fixed; bottom: 20px; right: 20px; background: #3a1e1e; border: 1px solid #a83d3d; border-radius: 8px; padding: 16px 20px; max-width: 400px; z-index: 2000; animation: slideUp 0.3s ease; } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .preview-error .error-header { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; } .preview-error .error-icon { font-size: 24px; } .preview-error .error-header h4 { margin: 0; flex: 1; color: #ff6b6b; font-size: 16px; } .preview-error .btn-close { background: #3a3a3a; border: 1px solid #555; color: #e0e0e0; width: 24px; height: 24px; border-radius: 4px; cursor: pointer; font-size: 14px; line-height: 1; } .preview-error .error-message { color: #e0e0e0; font-size: 14px; line-height: 1.5; } /* Button variants */ .btn { padding: 8px 16px; border: none; border-radius: 6px; font-size: 14px; cursor: pointer; transition: all 0.2s; font-weight: 500; } .btn-sm { padding: 4px 12px; font-size: 13px; } .btn-secondary { background: #3a3a3a; color: #e0e0e0; border: 1px solid #555; } .btn-secondary:hover { background: #4a4a4a; border-color: #666; } .btn-danger { background: #a83d3d; color: white; } .btn-danger:hover { background: #c94e4e; } /* Responsive adjustments */ @media (max-width: 768px) { .preview-panel { height: 50vh; } .preview-header { flex-direction: column; gap: 8px; align-items: stretch; } .preview-actions { justify-content: space-between; } .preview-title { justify-content: space-between; } }