/* ============================================================
   yanyu-license 后台 · Liquid Glass 主题 (基于 liquid-ui)
   液态玻璃质感 · 亮/暗双模式 · 4 色板可切换
   底层 tokens 来自 vendor/liquid/styles/tokens.css
   ============================================================ */
* { box-sizing: border-box; margin: 0; padding: 0; }

:root {
  /* 字体（保留原后台的中文雅致字体栈） */
  --serif: "Noto Serif SC", "Songti SC", "STSong", serif;
  --sans: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
  --mono: ui-monospace, "Cascadia Code", "JetBrains Mono", Consolas, monospace;

  /* 桌面布局 */
  --r-sm: 10px; --r-md: 14px; --r-lg: 20px; --r-pill: 999px;
  --content-w: 1480px;
}

html { scrollbar-color: var(--liquid-ink-muted) transparent; }
body {
  min-height: 100vh;
  font-family: var(--sans);
  color: var(--liquid-ink);
  background:
    radial-gradient(1100px 520px at 10% -8%, color-mix(in srgb, var(--liquid-accent) 16%, transparent), transparent 60%),
    radial-gradient(900px 480px at 96% 108%, color-mix(in srgb, var(--liquid-palette-amber, var(--liquid-accent)) 12%, transparent), transparent 55%),
    radial-gradient(760px 420px at 55% 45%, color-mix(in srgb, var(--liquid-palette-violet, var(--liquid-accent)) 8%, transparent), transparent 60%),
    linear-gradient(180deg, color-mix(in srgb, var(--liquid-accent) 6%, Canvas), Canvas);
  background-attachment: fixed;
  -webkit-font-smoothing: antialiased;
}
[data-liquid-mode="dark"] body {
  background:
    radial-gradient(1100px 520px at 10% -8%, color-mix(in srgb, var(--liquid-accent) 20%, transparent), transparent 60%),
    radial-gradient(900px 480px at 96% 108%, color-mix(in srgb, var(--liquid-palette-violet, var(--liquid-accent)) 14%, transparent), transparent 55%),
    linear-gradient(180deg, color-mix(in srgb, var(--liquid-accent) 8%, Canvas), Canvas);
}

/* 细滚动条 */
::-webkit-scrollbar { width: 9px; height: 9px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--liquid-ink-muted) 45%, transparent); border-radius: 6px; border: 2px solid transparent; background-clip: content-box; }
::-webkit-scrollbar-thumb:hover { background: var(--liquid-ink-muted); border: 2px solid transparent; background-clip: content-box; }

/* ===================== 玻璃面板基元 ===================== */
.glass {
  position: relative; isolation: isolate; overflow: hidden;
  border-radius: var(--r-lg);
  color: var(--liquid-ink);
  border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 45%, transparent);
  box-shadow: var(--liquid-shadow-control);
  transition: border-color var(--liquid-duration-fast) var(--liquid-ease-standard),
              box-shadow var(--liquid-duration-fast) var(--liquid-ease-standard);
}
.glass > * { position: relative; z-index: 1; }
.glass::before {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background: linear-gradient(135deg, var(--liquid-tint), var(--liquid-tint-deep));
  box-shadow: inset 0 1px 1px var(--liquid-rim-high), inset -1px -1px 1px var(--liquid-rim-low);
}
.glass--hover:hover { border-color: color-mix(in srgb, var(--liquid-accent) 45%, transparent); box-shadow: var(--liquid-shadow); }

/* ===================== 布局 ===================== */
.shell { width: min(var(--content-w), calc(100% - 2.4rem)); margin: 0 auto; padding: 1.6rem 0 4rem; }

/* ===================== 顶栏 ===================== */
.top {
  position: sticky; top: 10px; z-index: 50;
  display: flex; align-items: center; justify-content: space-between;
  padding: 0.85rem 1.15rem; margin-bottom: 1.4rem;
}
.brand { display: flex; align-items: center; gap: 0.85rem; }
.logo {
  width: 44px; height: 44px; border-radius: 13px; flex: none;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(140deg, var(--liquid-accent), color-mix(in srgb, var(--liquid-accent) 55%, #000 20%));
  color: var(--liquid-on-accent); font-size: 21px;
  box-shadow: var(--liquid-shadow-control-small), inset 0 1px 0 var(--liquid-rim-high);
  text-shadow: 0 1px 2px rgba(0,0,0,0.2);
}
.title { font-size: 1.25rem; font-weight: 700; font-family: var(--serif); letter-spacing: 0.1em; color: var(--liquid-ink); }
.top-actions { display: flex; align-items: center; gap: 0.5rem; }

/* 主题切换器 */
.theme-picker { display: inline-flex; align-items: center; gap: 6px; padding: 4px; border-radius: var(--r-pill); }
.theme-picker .liquid-theme-toggle { width: 34px; height: 34px; border: 0; background: transparent; cursor: pointer; border-radius: 50%; color: var(--liquid-ink); font-size: 1rem; }
.theme-picker .liquid-theme-toggle:hover { background: color-mix(in srgb, var(--liquid-accent) 14%, transparent); }
.theme-picker .liquid-palette-picker button { width: 20px; height: 20px; border-width: 2px; }
.theme-picker .liquid-palette-picker { gap: 5px; }

/* ===================== 卡片 ===================== */
.card { padding: 1.3rem 1.4rem; margin-bottom: 1.2rem; }
.card:hover { border-color: color-mix(in srgb, var(--liquid-rim-high) 65%, transparent); }
.card-title { font-size: 1.05rem; font-weight: 700; font-family: var(--serif); margin-bottom: 0.9rem; display: flex; align-items: center; gap: 0.6rem; color: var(--liquid-ink); }
.hint { color: var(--liquid-ink-muted); font-size: 0.82rem; margin-bottom: 0.8rem; line-height: 1.6; }

/* ===================== 表单 ===================== */
.form-row { display: flex; gap: 0.9rem; flex-wrap: wrap; margin-bottom: 0.9rem; }
.form-row label { display: flex; flex-direction: column; font-size: 0.75rem; color: var(--liquid-ink-muted); gap: 0.35rem; }

input, select, textarea {
  background: color-mix(in srgb, var(--liquid-tint) 72%, transparent);
  border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 62%, transparent);
  color: var(--liquid-ink);
  border-radius: 12px; padding: 0.6rem 0.85rem; font-size: 0.9rem;
  font-family: var(--sans);
  box-shadow: inset 0 1px 1px var(--liquid-rim-high);
  transition: border-color var(--liquid-duration-fast), box-shadow var(--liquid-duration-fast), background var(--liquid-duration-fast);
}
input, select { min-width: 150px; }
textarea { resize: vertical; min-height: 52px; line-height: 1.5; }
input:hover, select:hover, textarea:hover { border-color: color-mix(in srgb, var(--liquid-accent) 55%, transparent); }
input:focus, select:focus, textarea:focus {
  outline: none;
  border-color: var(--liquid-accent);
  box-shadow: inset 0 1px 1px var(--liquid-rim-high), 0 0 0 3px color-mix(in srgb, var(--liquid-accent) 22%, transparent);
}
input::placeholder, textarea::placeholder { color: var(--liquid-ink-muted); }

select {
  appearance: none; -webkit-appearance: none;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23888f9e' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 0.7rem center;
  padding-right: 2rem; cursor: pointer;
}

/* ===================== 按钮 ===================== */
button {
  border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 65%, transparent);
  border-radius: var(--liquid-radius-control, 999px); padding: 0.6rem 1.25rem; font-size: 0.9rem;
  cursor: pointer; font-family: var(--sans); line-height: 1.4; position: relative;
  background: color-mix(in srgb, var(--liquid-tint) 76%, transparent);
  color: var(--liquid-ink);
  box-shadow: inset 0 1px 1px var(--liquid-rim-high), var(--liquid-shadow-control);
  transition: transform var(--liquid-duration-fast) var(--liquid-ease-standard), background var(--liquid-duration-fast), box-shadow var(--liquid-duration-fast);
}
button:hover:not(:disabled) { background: color-mix(in srgb, var(--liquid-tint) 86%, var(--liquid-accent) 14%); }
button:active:not(:disabled) { transform: scale(0.97); }
button:disabled { cursor: not-allowed; opacity: 0.48; }
button.primary {
  background: color-mix(in srgb, var(--liquid-accent) 82%, transparent);
  color: var(--liquid-on-accent); font-weight: 600;
}
button.primary:hover:not(:disabled) { background: var(--liquid-accent); }
button.ghost { background: transparent; box-shadow: none; }
button.ghost.danger { border-color: color-mix(in srgb, var(--liquid-danger) 45%, transparent); color: var(--liquid-danger); }
button.ghost.danger:hover:not(:disabled) { background: color-mix(in srgb, var(--liquid-danger) 14%, transparent); border-color: var(--liquid-danger); }

.btn-mini {
  background: transparent; box-shadow: none;
  border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 62%, transparent); color: var(--liquid-ink-muted);
  padding: 0.14rem 0.6rem; font-size: 0.74rem; border-radius: var(--r-pill); cursor: pointer;
}
.btn-mini:hover:not(:disabled) { border-color: var(--liquid-accent); color: var(--liquid-accent); background: color-mix(in srgb, var(--liquid-accent) 12%, transparent); }
.btn-mini.btn-del { border-color: color-mix(in srgb, var(--liquid-danger) 45%, transparent); color: var(--liquid-danger); }
.btn-mini.btn-del:hover { background: var(--liquid-danger); color: var(--liquid-on-accent); border-color: var(--liquid-danger); }

/* ===================== 消息 ===================== */
.msg { margin-top: 0.7rem; font-size: 0.82rem; min-height: 1.2rem; }
.msg.is-error { color: var(--liquid-danger); }
.msg.is-ok { color: var(--liquid-success); }

/* ===================== 生成结果 ===================== */
.gen-result { margin-top: 0.9rem; border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 55%, transparent); border-radius: var(--r-md); padding: 0.9rem; background: color-mix(in srgb, var(--liquid-tint-deep) 55%, transparent); }
.gen-title { font-size: 0.78rem; color: var(--liquid-ink-muted); margin-bottom: 0.5rem; }
.codes { display: flex; flex-direction: column; gap: 0.4rem; margin-bottom: 0.7rem; }
.code-item {
  font-family: var(--mono); font-size: 0.95rem; letter-spacing: 1px;
  background: color-mix(in srgb, var(--liquid-tint) 60%, transparent);
  border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 62%, transparent); border-radius: 10px;
  padding: 0.55rem 0.9rem; cursor: pointer; color: var(--liquid-ink);
  transition: all 0.15s; display: flex; justify-content: space-between; align-items: center; gap: 0.5rem;
}
.code-item:hover { border-color: var(--liquid-accent); color: var(--liquid-accent); background: color-mix(in srgb, var(--liquid-accent) 10%, transparent); }
.code-item::after { content: "⧉ 复制"; font-size: 0.7rem; color: var(--liquid-ink-muted); font-family: var(--sans); letter-spacing: 0; }
.code-item:hover::after { color: var(--liquid-accent); }

.stat { font-size: 0.78rem; color: var(--liquid-ink-muted); font-weight: 400; }

/* ===================== 工具栏 ===================== */
.toolbar { display: flex; align-items: center; gap: 0.7rem; flex-wrap: wrap; margin-bottom: 0.8rem; }
#search-input { flex: 1; min-width: 200px; max-width: 380px; }
.filter-bar { display: inline-flex; align-items: center; gap: 0.55rem; flex-wrap: wrap; }
.filter-chip {
  min-height: 34px; padding: 0.2rem 0.85rem; font-size: 0.78rem; font-weight: 600;
  border-radius: var(--r-pill); cursor: pointer;
  border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 62%, transparent);
  background: color-mix(in srgb, var(--liquid-tint) 66%, transparent);
  color: var(--liquid-ink-muted);
  transition: all 0.15s;
}
.filter-chip:hover { border-color: color-mix(in srgb, var(--liquid-accent) 55%, transparent); color: var(--liquid-accent); }
.filter-chip.is-on {
  background: color-mix(in srgb, var(--liquid-accent) 18%, var(--liquid-tint));
  border-color: color-mix(in srgb, var(--liquid-accent) 60%, transparent);
  color: var(--liquid-accent);
  box-shadow: var(--liquid-shadow-control-small);
}
.filter-count { font-size: 0.68rem; opacity: 0.75; margin-left: 0.3rem; font-weight: 400; }
.toolbar-batch { display: inline-flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }

/* ===================== 表格 ===================== */
.table-wrap { overflow-x: auto; margin-top: 0.5rem; border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 45%, transparent); border-radius: var(--r-md); background: color-mix(in srgb, var(--liquid-tint) 54%, transparent); }
table { width: 100%; border-collapse: collapse; font-size: 0.84rem; }
th, td { text-align: left; padding: 0.6rem 0.75rem; border-bottom: 1px solid color-mix(in srgb, var(--liquid-rim-high) 22%, transparent); white-space: nowrap; }
thead th {
  color: var(--liquid-ink-muted); font-weight: 600; font-size: 0.74rem; letter-spacing: 0.04em;
  background: color-mix(in srgb, var(--liquid-tint-deep) 88%, transparent);
  backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px);
  position: sticky; top: 0; z-index: 1;
}
thead th:first-child { border-top-left-radius: var(--r-md); }
thead th:last-child { border-top-right-radius: var(--r-md); }
tbody tr { transition: background 0.14s; }
tbody tr:hover { background: color-mix(in srgb, var(--liquid-accent) 8%, transparent); }
tbody tr:last-child td { border-bottom: none; }
td { color: var(--liquid-ink); }
.mono { font-family: var(--mono); font-size: 0.82rem; }
.col-check { width: 2.2rem; text-align: center; }
.col-check input, .row-check {
  min-width: 0; width: 16px; height: 16px; accent-color: var(--liquid-accent); cursor: pointer; border-radius: 4px;
}
.ops { white-space: nowrap; }
.empty { text-align: center; color: var(--liquid-ink-muted); padding: 1.6rem 0; }

/* 状态徽章 */
.st { padding: 0.12rem 0.65rem; border-radius: var(--r-pill); font-size: 0.74rem; font-weight: 700; display: inline-block; }
.st-unused { color: var(--liquid-info); background: color-mix(in srgb, var(--liquid-info) 13%, transparent); border: 1px solid color-mix(in srgb, var(--liquid-info) 28%, transparent); }
.st-active { color: var(--liquid-success); background: color-mix(in srgb, var(--liquid-success) 13%, transparent); border: 1px solid color-mix(in srgb, var(--liquid-success) 28%, transparent); }
.st-disabled { color: var(--liquid-danger); background: color-mix(in srgb, var(--liquid-danger) 13%, transparent); border: 1px solid color-mix(in srgb, var(--liquid-danger) 28%, transparent); }
.st-expired { color: var(--liquid-warning); background: color-mix(in srgb, var(--liquid-warning) 13%, transparent); border: 1px solid color-mix(in srgb, var(--liquid-warning) 28%, transparent); }

/* ===================== 分页 ===================== */
.pager { display: flex; align-items: center; justify-content: flex-end; gap: 0.9rem; margin-top: 0.9rem; flex-wrap: wrap; }
.pager-info { font-size: 0.78rem; color: var(--liquid-ink-muted); }
.pager-size { display: inline-flex; align-items: center; gap: 0.45rem; font-size: 0.78rem; color: var(--liquid-ink-muted); }
.pager-size select { min-width: 64px; padding: 0.3rem 0.5rem; font-size: 0.82rem; border-radius: 8px; }
.pager button { padding: 0.3rem 0.8rem; font-size: 0.8rem; }
.pager button:disabled { opacity: 0.4; cursor: not-allowed; }

/* ===================== 可折叠卡 ===================== */
.card-title.collapsible {
  display: flex; align-items: center; gap: 0.6rem;
  width: 100%; text-align: left; cursor: pointer;
  background: transparent; border: none; box-shadow: none; padding: 0.2rem 0;
  font-family: var(--serif); font-size: 1.05rem; font-weight: 700; color: var(--liquid-ink);
  margin-bottom: 0; border-radius: 10px;
}
.card-title.collapsible::before {
  content: ""; width: 4px; height: 1.1em; border-radius: 2px;
  background: linear-gradient(180deg, var(--liquid-accent), color-mix(in srgb, var(--liquid-accent) 55%, transparent)); flex: none;
}
.card-title.collapsible:hover { color: var(--liquid-accent); background: transparent; }
.card-title.collapsible .arrow { margin-left: auto; color: var(--liquid-ink-muted); font-size: 0.95rem; transition: transform 0.2s; }
.card-title.collapsible[aria-expanded="true"] .arrow { transform: rotate(180deg); }
.card-body { padding-top: 0.9rem; }
.hint-inline { font-size: 0.72rem; color: var(--liquid-ink-muted); font-weight: 400; margin-left: 0.5rem; }

/* ===================== 远程控制 ===================== */
.ctrl-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 0.9rem; margin: 0.6rem 0; }
.ctrl-block {
  display: flex; flex-direction: column; gap: 0.55rem;
  background: color-mix(in srgb, var(--liquid-tint) 60%, transparent);
  border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 55%, transparent);
  border-radius: var(--r-md); padding: 0.85rem 0.95rem;
  box-shadow: inset 0 1px 1px var(--liquid-rim-high);
  transition: border-color 0.18s, box-shadow 0.18s;
}
.ctrl-block:hover { border-color: color-mix(in srgb, var(--liquid-accent) 40%, transparent); box-shadow: var(--liquid-shadow-control); }
.ctrl-head { font-size: 0.84rem; font-weight: 700; color: var(--liquid-ink); display: flex; align-items: center; gap: 0.4rem; }
.ctrl-block textarea { min-height: 52px; }
.ctrl-actions { display: flex; align-items: center; gap: 0.7rem; flex-wrap: wrap; margin-top: 0.15rem; }
.ctrl-label { display: flex; flex-direction: column; font-size: 0.75rem; color: var(--liquid-ink-muted); gap: 0.4rem; }
.ctrl-label input, .ctrl-label textarea { min-width: 0; width: 100%; }
.version-row { display: flex; align-items: center; gap: 0.55rem; }
.version-row select { flex: 1; min-width: 0; }
.version-row input { flex: 1; min-width: 0; }

/* ===================== 登录 ===================== */
#login-panel {
  max-width: 460px; margin: 6vh auto 0;
  box-shadow: var(--liquid-shadow);
  position: relative; overflow: hidden;
}
#login-panel::after {
  content: ""; position: absolute; inset: 0 0 auto 0; height: 5px; z-index: 1;
  background: linear-gradient(90deg, var(--liquid-accent), var(--liquid-palette-violet, var(--liquid-accent)), color-mix(in srgb, var(--liquid-accent) 50%, #000));
}
#login-account-pane input { width: 100%; max-width: 380px; display: block; margin-bottom: 0.7rem; }
#login-panel .primary { width: 100%; max-width: 380px; display: block; margin-top: 0.2rem; padding: 0.72rem; }

/* ===================== 账号管理 ===================== */
.user-create { background: color-mix(in srgb, var(--liquid-tint) 60%, transparent); border: 1px dashed color-mix(in srgb, var(--liquid-rim-high) 70%, transparent); border-radius: var(--r-md); padding: 1.1rem 1.2rem; margin-bottom: 1.2rem; }
.user-create-head { font-family: var(--serif); font-weight: 700; font-size: 0.98rem; color: var(--liquid-accent); margin-bottom: 0.85rem; letter-spacing: 0.04em; }
.user-create-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 0.9rem; margin-bottom: 0.95rem; }
.user-field { display: flex; flex-direction: column; gap: 0.4rem; }
.user-field label { font-size: 0.75rem; color: var(--liquid-ink-muted); }
.user-field input, .user-field select { width: 100%; }
.perm-box { background: color-mix(in srgb, var(--liquid-tint) 45%, transparent); border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 55%, transparent); border-radius: var(--r-md); padding: 0.85rem 0.95rem; margin-bottom: 0.95rem; }
.perm-title { font-size: 0.78rem; font-weight: 700; color: var(--liquid-ink); margin-bottom: 0.6rem; display: flex; align-items: center; gap: 0.4rem; }
.perm-title::before { content: "◆"; font-size: 0.55rem; color: var(--liquid-accent); }
.perm-grid { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.perm-chip {
  display: inline-flex; align-items: center; gap: 0.4rem;
  background: color-mix(in srgb, var(--liquid-tint) 66%, transparent);
  border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 62%, transparent); border-radius: var(--r-sm);
  padding: 0.42rem 0.8rem; font-size: 0.8rem; cursor: pointer; transition: all 0.15s; color: var(--liquid-ink-muted);
}
.perm-chip:hover { border-color: var(--liquid-accent); }
.perm-chip input { min-width: 0; width: 15px; height: 15px; accent-color: var(--liquid-accent); margin: 0; }
.perm-chip:has(input:checked) { border-color: color-mix(in srgb, var(--liquid-accent) 60%, transparent); background: color-mix(in srgb, var(--liquid-accent) 14%, transparent); }
.perm-chip input:checked + span { color: var(--liquid-accent); font-weight: 600; }
.perm-none { font-size: 0.72rem; color: var(--liquid-ink-muted); margin-top: 0.6rem; }
.user-create-actions { display: flex; align-items: center; gap: 0.9rem; flex-wrap: wrap; }
.user-create-actions .msg { margin-top: 0; }

.users-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 0.9rem; }
.user-card {
  background: color-mix(in srgb, var(--liquid-tint) 65%, transparent);
  border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 55%, transparent); border-radius: var(--r-md);
  padding: 1rem; box-shadow: inset 0 1px 1px var(--liquid-rim-high); display: flex; flex-direction: column; gap: 0.7rem;
  transition: all 0.18s;
}
.user-card:hover { border-color: color-mix(in srgb, var(--liquid-accent) 50%, transparent); box-shadow: var(--liquid-shadow-control); transform: translateY(-2px); }
.user-card-top { display: flex; align-items: center; gap: 0.7rem; }
.user-avatar {
  width: 44px; height: 44px; border-radius: 12px; display: flex; align-items: center; justify-content: center;
  font-size: 1.1rem; font-weight: 700; color: var(--liquid-on-accent); flex: none;
  background: linear-gradient(140deg, var(--liquid-palette-violet, var(--liquid-accent)), var(--liquid-accent));
  box-shadow: var(--liquid-shadow-control-small);
}
.user-meta { flex: 1; min-width: 0; }
.user-name { font-weight: 600; display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; color: var(--liquid-ink); }
.user-created { font-size: 0.72rem; color: var(--liquid-ink-muted); margin-top: 0.25rem; }
.user-status { flex: none; }
.role-badge { font-size: 0.66rem; padding: 0.12rem 0.6rem; border-radius: var(--r-pill); font-weight: 600; }
.role-admin { color: var(--liquid-on-accent); background: linear-gradient(135deg, var(--liquid-palette-violet, var(--liquid-accent)), var(--liquid-accent)); box-shadow: var(--liquid-shadow-control-small); }
.role-op { color: var(--liquid-accent); background: color-mix(in srgb, var(--liquid-accent) 13%, transparent); border: 1px solid color-mix(in srgb, var(--liquid-accent) 25%, transparent); }
.user-perms { font-size: 0.8rem; color: var(--liquid-ink-muted); line-height: 1.55; min-height: 1.55em; }
.user-actions { display: flex; gap: 0.4rem; flex-wrap: wrap; border-top: 1px dashed color-mix(in srgb, var(--liquid-rim-high) 55%, transparent); padding-top: 0.65rem; }
.users-empty { grid-column: 1 / -1; text-align: center; color: var(--liquid-ink-muted); padding: 1.8rem; border: 1px dashed color-mix(in srgb, var(--liquid-rim-high) 55%, transparent); border-radius: var(--r-md); }

/* ===================== 备注编辑 / 行副标题 ===================== */
.note-cell { cursor: pointer; }
.note-cell:hover { background: color-mix(in srgb, var(--liquid-accent) 9%, transparent); color: var(--liquid-accent); }
.dim { color: var(--liquid-ink-muted); font-size: 0.78rem; }
.row-sub { font-size: 0.7rem; color: var(--liquid-ink-muted); margin-top: 0.15rem; }

/* ===================== 弹窗 ===================== */
.modal-mask {
  position: fixed; inset: 0; z-index: 100;
  background: color-mix(in srgb, var(--liquid-ink) 26%, transparent);
  backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px);
  display: flex; align-items: center; justify-content: center;
  animation: maskIn 0.18s ease;
}
.modal-mask[hidden] { display: none; }
@keyframes maskIn { from { opacity: 0; } to { opacity: 1; } }
.modal-box {
  background: color-mix(in srgb, var(--liquid-tint-deep) 92%, Canvas);
  border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 55%, transparent); border-radius: 24px;
  box-shadow: var(--liquid-shadow); width: min(680px, 94vw); max-height: 82vh;
  display: flex; flex-direction: column; overflow: hidden;
  animation: boxIn 0.22s cubic-bezier(0.2, 0.9, 0.3, 1.2);
}
@keyframes boxIn { from { opacity: 0; transform: translateY(14px) scale(0.97); } to { opacity: 1; transform: none; } }
.modal-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 0.85rem 1.15rem; border-bottom: 1px solid color-mix(in srgb, var(--liquid-rim-high) 36%, transparent);
  font-family: var(--serif); font-weight: 700; font-size: 1rem; color: var(--liquid-ink);
}
.modal-head .ghost { border: none; background: transparent; color: var(--liquid-ink-muted); font-size: 1.4rem; line-height: 1; cursor: pointer; padding: 0.2rem 0.5rem; border-radius: 8px; box-shadow: none; }
.modal-head .ghost:hover { color: var(--liquid-danger); background: color-mix(in srgb, var(--liquid-danger) 12%, transparent); }
.modal-body { padding: 1rem 1.15rem; overflow: auto; }
.export-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; }
.export-table th, .export-table td { text-align: left; padding: 0.55rem 0.65rem; border-bottom: 1px solid color-mix(in srgb, var(--liquid-rim-high) 22%, transparent); }
.export-table thead th { background: transparent; color: var(--liquid-ink-muted); font-weight: 600; font-size: 0.74rem; }
.export-table td.mono { font-family: var(--mono); }
.export-table td.small { font-size: 0.76rem; color: var(--liquid-ink-muted); }
.export-table tbody tr:hover { background: color-mix(in srgb, var(--liquid-accent) 8%, transparent); }
.exports-empty { padding: 1.6rem; text-align: center; color: var(--liquid-ink-muted); }

/* ===================== 激活码设置弹窗 ===================== */
.modal-box-sm { width: min(480px, 94vw); }
.set-field { display: flex; flex-direction: column; gap: 0.4rem; margin-bottom: 1rem; }
.set-field label { font-size: 0.78rem; font-weight: 600; color: var(--liquid-ink); }
.set-field input { width: 100%; }
.set-desc { font-size: 0.72rem; color: var(--liquid-ink-muted); line-height: 1.5; }
.set-actions { display: flex; align-items: center; gap: 0.7rem; margin-top: 0.5rem; flex-wrap: wrap; }
.set-actions .msg { margin-top: 0; }

/* ===================== 顶栏当前用户徽章 ===================== */
.user-chip {
  display: inline-flex; align-items: center; gap: 0.5rem;
  background: color-mix(in srgb, var(--liquid-tint) 68%, transparent);
  border: 1px solid color-mix(in srgb, var(--liquid-rim-high) 62%, transparent); border-radius: var(--r-pill);
  padding: 0.28rem 0.75rem 0.28rem 0.3rem; font-size: 0.8rem;
}
.user-chip[hidden] { display: none; }
.user-chip-avatar {
  width: 26px; height: 26px; border-radius: 50%; flex: none;
  display: flex; align-items: center; justify-content: center;
  background: var(--liquid-accent); color: var(--liquid-on-accent); font-size: 0.78rem; font-weight: 700;
}
.user-chip-name { color: var(--liquid-ink); font-weight: 600; }
.user-chip-role {
  font-size: 0.66rem; padding: 0.08rem 0.5rem; border-radius: var(--r-pill);
  color: var(--liquid-on-accent); background: linear-gradient(135deg, var(--liquid-palette-violet, var(--liquid-accent)), var(--liquid-accent)); font-weight: 600;
}
.user-chip-role.op { color: var(--liquid-accent); background: color-mix(in srgb, var(--liquid-accent) 13%, transparent); border: 1px solid color-mix(in srgb, var(--liquid-accent) 25%, transparent); }

/* ===================== 响应式 ===================== */
@media (max-width: 640px) {
  .shell { width: 100%; padding: 0.9rem; }
  .top { padding: 0.7rem 0.9rem; }
  .form-row { flex-direction: column; }
  .form-row input, .form-row select { width: 100%; }
  .card { padding: 1rem; }
  .toolbar { flex-direction: column; align-items: stretch; }
  #search-input { max-width: none; width: 100%; }
  .pager { justify-content: center; }
  .ctrl-grid { grid-template-columns: 1fr; }
  .users-grid { grid-template-columns: 1fr; }
  #login-panel { margin-top: 2vh; }
}
