:root{--bg:#0f1117;--bg-card:#1a1d27;--bg-card-hover:#222636;--bg-input:#252836;--border:#2e3241;--border-focus:#6366f1;--text:#e2e8f0;--text-muted:#94a3b8;--text-dim:#64748b;--primary:#6366f1;--primary-hover:#818cf8;--success:#22c55e;--warning:#f59e0b;--danger:#ef4444;--info:#38bdf8;--radius:8px;--radius-lg:12px}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.6}button{cursor:pointer;border-radius:var(--radius);border:none;padding:8px 16px;font-family:inherit;font-size:14px;transition:all .2s}button:disabled{opacity:.5;cursor:not-allowed}input,textarea,select{background:var(--bg-input);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);outline:none;padding:8px 12px;font-family:inherit;font-size:14px;transition:border-color .2s}input:focus,textarea:focus,select:focus{border-color:var(--border-focus)}textarea{resize:vertical;min-height:80px}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-success{background:var(--success);color:#fff}.btn-success:hover:not(:disabled){background:#16a34a}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:#dc2626}.btn-ghost{color:var(--text-muted);border:1px solid var(--border);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--bg-card-hover);color:var(--text)}.btn-sm{padding:4px 10px;font-size:12px}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px}.label{color:var(--text-muted);margin-bottom:6px;font-size:13px;font-weight:500;display:block}.badge{border-radius:9999px;padding:2px 8px;font-size:11px;font-weight:500;display:inline-block}.badge-idle{background:var(--bg-input);color:var(--text-dim)}.badge-pending{color:#92400e;background:#fef3c7}.badge-generating{color:#1e40af;background:#dbeafe}.badge-completed{color:#166534;background:#dcfce7}.badge-failed{color:#991b1b;background:#fee2e2}.badge-partial{color:#92400e;background:#fef3c7}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:2px solid var(--border);border-top-color:var(--primary);vertical-align:middle;border-radius:50%;width:16px;height:16px;margin-right:6px;animation:.6s linear infinite spin;display:inline-block}
