.card { width: 100%; background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius-xl); padding: 18px; display: flex; flex-direction: column; gap: 14px; box-shadow: var(--shadow-sm); } .header { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .titleWrap { display: inline-flex; align-items: center; gap: 8px; color: var(--text-primary); font-size: 14px; font-weight: 700; } .viewport { position: relative; border-radius: 20px; overflow: hidden; background: var(--bg-surface-2); min-height: 230px; border: 1px solid var(--border); } .video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; } .videoHidden { opacity: 0; pointer-events: none; } .videoVisible { opacity: 1; } .placeholder { min-height: 230px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; color: var(--text-muted); text-align: center; padding: 24px; } .canvas { display: none; } .actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; } .primaryBtn, .secondaryBtn { display: inline-flex; align-items: center; gap: 8px; border-radius: 12px; padding: 10px 14px; font-size: 13px; font-weight: 600; cursor: pointer; border: 1px solid transparent; } .primaryBtn { background: var(--accent); color: white; } .secondaryBtn { background: var(--bg-surface-2); color: var(--text-secondary); border-color: var(--border); } .primaryBtn:disabled { opacity: 0.7; cursor: not-allowed; } .error { color: var(--ai-generated); font-size: 13px; font-weight: 600; } .spin { animation: spin 0.9s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } }