.btn{font-family:inherit}.btn-sm{min-height:36px;padding:.5rem 1rem;font-size:.8125rem}.btn-md{min-height:44px;padding:.75rem 1.5rem;font-size:.9375rem}.btn-lg{min-height:48px;padding:1rem 2rem;font-size:1rem}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:disabled:hover{transform:none}.btn:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.btn-outline{color:var(--primary);border:1px solid var(--primary);background:0 0}.btn-outline:hover:not(:disabled){background:var(--primary);color:#fff}.btn-spinner{border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:14px;height:14px;animation:.6s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width:480px){.btn-sm{min-height:40px;padding:.625rem 1rem}.btn-md{min-height:48px}.btn-lg{min-height:52px}}
.card-hover:hover{cursor:pointer}.card-padding{padding:var(--spacing-lg)}.card-compact{padding:var(--spacing-md)}
.loading-container{justify-content:center;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-md);flex-direction:column;display:flex}.spinner{border:2px solid var(--glass-border);border-top-color:var(--primary);border-radius:50%;animation:.7s linear infinite spin}.spinner-sm{border-width:2px;width:1.25rem;height:1.25rem}.spinner-md{border-width:2px;width:2rem;height:2rem}.spinner-lg{border-width:3px;width:3rem;height:3rem}.loading-text{color:var(--text-secondary);margin:0;font-size:.8125rem}
.progress-container{width:100%}.progress-header{margin-bottom:var(--spacing-xs);justify-content:space-between;align-items:center;display:flex}.progress-label{color:var(--text-secondary);font-size:.875rem;font-weight:500}.progress-percentage{color:var(--primary);font-size:.875rem;font-weight:600}.progress-bar{background:var(--bg-tertiary);border-radius:999px;width:100%;height:8px;position:relative;overflow:hidden}.progress-fill{background:linear-gradient(90deg,var(--primary),var(--accent));border-radius:999px;height:100%;transition:width .3s ease-out;position:relative}.progress-fill:after{content:"";background:linear-gradient(90deg,#0000,#fff3,#0000);animation:1.5s infinite shimmer;position:absolute;inset:0}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}
.process-log{background:var(--bg-tertiary);border:1px solid var(--glass-border);border-radius:var(--radius-md);margin:var(--spacing-md)0;overflow:hidden}.process-log-active{border-color:var(--primary);box-shadow:0 0 0 1px #6366f11a}.process-log-header{padding:var(--spacing-sm)var(--spacing-md);border-bottom:1px solid var(--glass-border);background:#0003;justify-content:space-between;align-items:center;display:flex}.process-log-title{text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);font-size:.75rem;font-weight:600}.process-log-indicator{background:var(--primary);border-radius:50%;width:8px;height:8px;animation:1.5s ease-in-out infinite pulse-glow}@keyframes pulse-glow{0%,to{opacity:1;box-shadow:0 0 4px var(--primary)}50%{opacity:.6;box-shadow:0 0 8px var(--primary)}}.process-log-entries{max-height:200px;padding:var(--spacing-xs);overflow-y:auto}.process-log-entry{align-items:flex-start;gap:var(--spacing-sm);padding:var(--spacing-xs)var(--spacing-sm);border-radius:var(--radius-sm);transition:background .15s;display:flex}.process-log-entry:hover{background:#ffffff05}.process-log-entry-icon{flex-shrink:0;justify-content:center;align-items:center;width:18px;height:18px;font-size:.75rem;display:flex}.icon-pending{color:var(--text-tertiary)}.icon-progress{color:var(--primary);animation:1s linear infinite spin}.icon-completed{color:var(--success)}.icon-error{color:var(--error)}.process-log-entry-content{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.process-log-entry-message{color:var(--text-primary);font-size:.8125rem;line-height:1.4}.process-log-entry-details{color:var(--text-tertiary);font-family:SF Mono,Fira Code,monospace;font-size:.75rem}.process-log-entry-time{color:var(--text-tertiary);flex-shrink:0;font-family:SF Mono,Fira Code,monospace;font-size:.6875rem}.process-log-entry-pending .process-log-entry-message{color:var(--text-secondary)}.process-log-entry-in-progress .process-log-entry-message{color:var(--primary-light)}.process-log-entry-completed .process-log-entry-message{color:var(--text-primary)}.process-log-entry-error .process-log-entry-message{color:var(--error)}
.download-btn{border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast);white-space:nowrap;border:none;justify-content:center;align-items:center;gap:6px;font-family:inherit;font-weight:500;display:inline-flex}.download-btn:disabled{cursor:not-allowed;opacity:.8}.download-btn-sm{min-height:32px;padding:6px 12px;font-size:.75rem}.download-btn-md{min-height:40px;padding:8px 16px;font-size:.8125rem}@media (max-width:480px){.download-btn-sm{min-height:40px;padding:8px 14px}.download-btn-md{min-height:44px;padding:10px 18px}}.download-btn-primary{background:linear-gradient(135deg,var(--primary),var(--primary-dark));color:#fff}.download-btn-primary:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 12px #6366f14d}.download-btn-secondary{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--glass-border)}.download-btn-secondary:hover:not(:disabled){background:var(--bg-secondary);border-color:var(--primary)}.download-btn-text{color:var(--primary);background:0 0;padding:4px 8px}.download-btn-text:hover:not(:disabled){background:#6366f11a}.download-btn-loading{pointer-events:none}.download-spinner{border:2px solid #ffffff4d;border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.6s linear infinite spin}.download-btn-secondary .download-spinner{border-color:var(--glass-border);border-top-color:var(--primary)}.download-icon{font-size:1em}@keyframes spin{to{transform:rotate(360deg)}}
