/* ============================================================
   铃音Township · 按钮与控件（唯一来源）
   ------------------------------------------------------------
   设计约定（与 css/tokens.css 同一套视觉方向）：
   · 统一圆角、内边距、字号；不再出现 6px/10px/胶囊 三种并存
   · 悬停只改颜色，不做上浮 / 提亮 / 彩色投影——那三种最显廉价
   · 每个按钮都有键盘焦点环与禁用态
   变体：主要（实心强调） / 次要（描边） / 危险（红描边）
   ============================================================ */

.btn,
.btn-save, .btn-ghost, .btn-del,
.portal-btn, .portal-button, .mini-btn,
.auth-nav-button, .auth-submit, .auth-cancel,
.nav-edit, .mat-gate-login, .lb-gate-login,
.workflow-import-btn, .mat-new-btn,
.member-approve, .member-delete, .member-reset,
.btn-link, .edit-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:.4rem;
  border:1px solid transparent;
  border-radius:var(--radius-md);
  padding:.6rem 1.1rem;
  font-family:var(--sans);
  font-size:.8rem;
  font-weight:400;
  letter-spacing:.06em;
  line-height:1.2;
  cursor:pointer;
  text-decoration:none;
  transition:background-color .18s var(--ease-out),
             border-color .18s var(--ease-out),
             color .18s var(--ease-out);
}

.btn:focus-visible,
.btn-save:focus-visible, .btn-ghost:focus-visible, .btn-del:focus-visible,
.portal-btn:focus-visible, .portal-button:focus-visible, .mini-btn:focus-visible,
.auth-nav-button:focus-visible, .auth-submit:focus-visible, .auth-cancel:focus-visible,
.nav-edit:focus-visible, .mat-gate-login:focus-visible, .lb-gate-login:focus-visible,
.workflow-import-btn:focus-visible, .mat-new-btn:focus-visible,
.member-approve:focus-visible, .member-delete:focus-visible, .member-reset:focus-visible,
.btn-link:focus-visible, .edit-btn:focus-visible{
  outline:none;
  box-shadow:var(--focus-ring);
}

.btn:disabled, .btn-save:disabled, .btn-ghost:disabled, .btn-del:disabled,
.portal-btn:disabled, .portal-button:disabled, .mini-btn:disabled,
.auth-submit:disabled, .auth-cancel:disabled,
.member-approve:disabled, .member-delete:disabled, .member-reset:disabled{
  opacity:.45;
  cursor:not-allowed;
  box-shadow:none;
}

/* ---------- 主要：实心强调色 ---------- */
.btn-save,
.portal-btn,
.portal-button,
.auth-submit,
.mat-gate-login,
.lb-gate-login,
.member-approve{
  background:var(--accent);
  border-color:var(--accent);
  color:var(--on-dark-text);
}
.btn-save:hover, .portal-btn:hover, .portal-button:hover, .auth-submit:hover:not(:disabled),
.mat-gate-login:hover, .lb-gate-login:hover, .member-approve:hover{
  background:var(--accent-deep);
  border-color:var(--accent-deep);
}
.btn-save:active, .portal-btn:active, .portal-button:active, .auth-submit:active, .member-approve:active{
  background:var(--accent-deep);
}

/* ---------- 次要：描边 ---------- */
.btn-ghost,
.portal-btn.secondary,
.portal-button.secondary,
.auth-cancel,
.auth-nav-button,
.nav-edit,
.workflow-import-btn,
.mat-new-btn,
.member-reset{
  background:var(--bg-elevated);
  border-color:var(--rule);
  color:var(--text-soft);
}
.btn-ghost:hover, .portal-btn.secondary:hover, .portal-button.secondary:hover, .auth-cancel:hover,
.auth-nav-button:hover, .nav-edit:hover, .workflow-import-btn:hover, .mat-new-btn:hover,
.member-reset:hover{
  background:var(--bg-sunken);
  border-color:var(--hairline-strong);
  color:var(--text);
}
.auth-nav-button.signed-in{border-color:var(--accent);color:var(--accent)}
.auth-nav-button.needs-upgrade{border-style:dashed}

/* ---------- 危险：红描边，悬停实心 ---------- */
.btn-del,
.member-delete{
  background:transparent;
  border-color:var(--danger);
  color:var(--danger);
}
.btn-del:hover, .member-delete:hover{background:var(--danger);border-color:var(--danger);color:var(--on-dark-text)}

/* ---------- 链接式：无底无框，仅文字 + 下划线（编辑入口这类） ---------- */
.btn-link,
.edit-btn{
  background:none;
  border-color:transparent;
  padding:.3rem .1rem;
  color:var(--text-soft);
  text-decoration:underline;
  text-underline-offset:3px;
}
.btn-link:hover,
.edit-btn:hover{background:none;color:var(--accent);border-color:transparent}

/* ---------- 胶囊筛选（成员分组切换） ---------- */
.member-filter{
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--glass-tint);
  border:1px solid var(--glass-line);
  border-radius:var(--radius-pill);
  box-shadow:0 1px 2px rgba(31,30,29,.03);
  color:var(--text-soft);
  cursor:pointer;
  font-family:var(--sans);
  font-size:.74rem;
  letter-spacing:.06em;
  padding:.42rem .95rem;
  transition:background-color .18s var(--ease-out),
             border-color .18s var(--ease-out),
             color .18s var(--ease-out);
}
.member-filter:hover{background:var(--glass-raised);border-color:var(--glass-edge);color:var(--text)}
.member-filter:focus-visible{outline:none;box-shadow:var(--focus-ring)}
.member-filter.active{background:var(--accent);border-color:var(--accent);color:var(--on-dark-text)}

/* ---------- 小号（表格行内操作等） ---------- */
.mini-btn,
.workflow-import-btn,
.auth-nav-button,
.nav-edit,
.mat-new-btn,
.member-approve, .member-delete, .member-reset{
  padding:.42rem .8rem;
  font-size:.74rem;
  border-radius:var(--radius-sm);
}
.mini-btn.danger{border-color:var(--hairline-strong);color:var(--danger)}
.mini-btn.danger:hover{background:var(--danger);border-color:var(--danger);color:var(--on-dark-text)}

/* ---------- 页面本地控件：只补键盘可达性，不动各自外观 ----------
   汉堡键 / 导航触发器 / 分类标签条 / 图标关闭键 / 折叠头各有各的形态，
   不硬塞进上面的按钮体系；但它们同样是可聚焦的交互元素，
   必须统一有键盘焦点环 —— 否则键盘用户看不到焦点在哪（WCAG 2.4.7）。
   新增这类控件时，把类名追加到本组。 */
.nav-burger:focus-visible,
.guild-nav-trigger:focus-visible,
.cat-tab:focus-visible,
.workflow-command:focus-visible,
.workflow-member-toggle:focus-visible,
.orbit-toggle:focus-visible,
.mat-del:focus-visible,
.mat-collapse:focus-visible,
.drawer-close:focus-visible,
.detail-close:focus-visible,
.audit-close:focus-visible{
  outline:none;
  box-shadow:var(--focus-ring);
}
/* （成员管理页的认领开关是 .switch，焦点环在 css/portal.css 里就地给，不列在这里） */

/* ---------- 成员管理页：玻璃变体 ----------
   这一页的小控件统一「半透明底 + 极细亮边」，但【不上 backdrop blur】——
   一屏里有几十个按钮/输入框，每个都开一层模糊会明显掉帧。
   真模糊只留给大面（卡片、面板，在 css/portal.css 的 .glass 上）。
   列宽对齐由 portal.css 的固定网格保证，这里只管皮。 */
.member-reset,
.member-delete{
  background:var(--glass-tint);
  border-color:var(--glass-line);
  box-shadow:0 1px 2px rgba(31,30,29,.04);
}
.member-reset{color:var(--text-soft)}
.member-reset:hover{background:var(--glass-raised);border-color:var(--glass-edge);color:var(--text)}
.member-delete{background:transparent;border-color:rgba(180,50,42,.3);color:var(--danger);box-shadow:none}
.member-delete:hover{background:var(--danger);border-color:var(--danger);color:var(--on-dark-text)}
/* 「通过加入」保持实心强调色 —— 它是待确认行里的主操作，不该被玻璃化削弱 */
.member-approve{box-shadow:0 1px 2px rgba(31,30,29,.06),0 6px 18px -10px rgba(168,80,47,.5)}

/* ---------- 保持布局职责：弹窗里的两个按钮平分宽度 ---------- */
.auth-actions .auth-submit,
.auth-actions .auth-cancel{min-width:0}
.auth-actions.single .auth-cancel{display:none}
