/* SmashCut 共享样式 — 两端加载 */
:root {
  --bg-primary: #0a0a0a;  --bg-card: #111111;
  --bg-card-hover: #1a1a1a;  --bg-elevated: #1e1e1e;
  --border: #1a1a1a;  --border-light: #333333;
  --text-primary: #e0e0e0;  --text-secondary: #888888;  --text-muted: #555555;
  --accent: #4CAF50;  --accent-hover: #43A047;  --accent-bg: #1a2e1a;
  --danger: #ef5350;  --danger-bg: #2a1a1e;
  --warn: #ff9800;  --warn-bg: #2a2a1e;
  --blue: #64B5F6;  --blue-bg: #1a2a3e;
  --radius-sm: 8px;  --radius-md: 12px;  --radius-lg: 16px;
}
.toast {
  position:fixed; top:70px; left:50%; transform:translateX(-50%);
  background:var(--bg-elevated,#1e1e1e); color:#fff; padding:10px 20px;
  border-radius:var(--radius-sm); font-size:15px; z-index:3000;
  box-shadow:0 4px 20px rgba(0,0,0,0.5); max-width:90vw; text-align:center;
  animation:toastIn 0.3s ease; pointer-events:none;
  border:1px solid var(--border-light,#333333);
}
@keyframes toastIn {
  from{opacity:0;transform:translateX(-50%) translateY(10px)}
  to{opacity:1;transform:translateX(-50%) translateY(0)}
}
.toast.hide {
  animation:toastOut 0.3s ease forwards;
}
@keyframes toastOut {
  to{opacity:0;transform:translateX(-50%) translateY(-10px)}
}
.toast.success{border-color:var(--accent)}
.toast.error{border-color:var(--danger)}

/* ── 全局 Reset（已在 shared，删掉各 CSS 文件中的重复） ── */
/* Reset 在文件开头第 12 行 */

/* ── 旋转动画 ── */
@keyframes spin { to { transform: rotate(360deg); } }
.spinner {
  display: inline-block; width: 32px; height: 32px;
  border: 3px solid var(--border); border-top-color: var(--accent);
  border-radius: 50%; animation: spin 0.8s linear infinite; margin-bottom: 12px;
}

/* ── 环境标签骨架 ── */
.env-tag {
  font-size:10px; padding:2px 7px; border-radius:4px; font-weight:600;
  line-height:1.4; white-space:nowrap; flex-shrink:0;
}

/* ── 按钮骨架（各项目可覆写 padding/font-size/min-height） ── */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  border-radius: var(--radius-sm); font-weight: 600; cursor: pointer;
  border: none; transition: opacity 0.2s;
  -webkit-user-select: none; user-select: none;
}
.btn:active { opacity: 0.8; }
.btn:disabled { opacity: 0.4; pointer-events: none; }
.btn-block { width: 100%; }
.btn-sm { padding: 10px 20px; font-size: 14px; min-height: 40px; }
.btn-primary { background: var(--accent); color: #fff; }
.btn-danger { background: var(--danger); color: #fff; }
.btn-outline { background: transparent; color: var(--text-primary); border: 1px solid var(--border); }
