@charset "utf-8";
/* ============================================================
   企盾脱敏系统 · 员工工作台
   设计规范：8px 栅格 / Naive UI 色板 / 统一控件高度 32px
   - 所有卡片 1px 描边，卡头独立分隔线
   - 所有间距只用 4 的倍数（4/8/12/16/20/24/32）
   - 圆角只有两档：控件 6px、卡片 8px
   ============================================================ */

:root{
  /* 主色（Naive UI 原色阶） */
  --primary:#18a058;
  --primary-h:#36ad6a;
  --primary-p:#0c7a43;
  --primary-soft:#e8f8ee;
  --primary-line:#b7e6c9;

  /* 语义色 */
  --success:#18a058;
  --warning:#f0a020;
  --warning-soft:#fdf6ec;
  --warning-line:#f7e2bb;
  --danger:#d03050;
  --danger-soft:#fef1f4;
  --danger-line:#f7cbd5;
  --info:#2080f0;
  --info-soft:#f2f4f7;

  /* 中性色 */
  --white:#ffffff;
  --bg:#f5f6f8;
  --line:#ebedf0;
  --line-2:#e2e5ea;
  --line-3:#f2f3f5;
  --txt:#1f2225;
  --txt-2:#333639;
  --txt-3:#767c82;
  --txt-4:#a6abb0;

  /* 尺寸 */
  --r-sm:4px;
  --r:6px;
  --r-card:8px;
  --h-ctl:32px;
  --h-head:56px;
  --side-w:232px;
  --gap:16px;
  --shadow:0 1px 2px rgba(31,34,37,.04);
  --shadow-pop:0 6px 24px -8px rgba(31,34,37,.18),0 2px 6px rgba(31,34,37,.06);
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{
  margin:0;
  background:var(--bg);
  color:var(--txt);
  font-size:13.5px;
  line-height:1.6;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",Arial,sans-serif;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
[v-cloak]{display:none!important}
h1,h2,h3,h4,p{margin:0}
button{font:inherit;color:inherit}
input,select,textarea{font-family:inherit}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;letter-spacing:-.2px;font-size:12.5px}

/* ============================================================
   控件（全部统一 32px 高，6px 圆角）
   ============================================================ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  height:var(--h-ctl);padding:0 14px;
  border:1px solid var(--line-2);border-radius:var(--r);
  background:var(--white);color:var(--txt-2);
  font-size:13px;font-weight:500;line-height:1;white-space:nowrap;cursor:pointer;
  transition:background-color .15s,border-color .15s,color .15s;
}
.btn:hover{color:var(--primary-p);border-color:var(--primary-line);background:var(--primary-soft)}
.btn:focus-visible{outline:2px solid var(--primary-line);outline-offset:1px}
.btn[disabled],.btn[disabled]:hover{
  cursor:not-allowed;opacity:.5;background:var(--white);color:var(--txt-2);border-color:var(--line-2);
}
.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-primary:hover{background:var(--primary-h);border-color:var(--primary-h);color:#fff}
.btn-primary[disabled],.btn-primary[disabled]:hover{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-danger{color:var(--danger);border-color:var(--danger-line);background:var(--white)}
.btn-danger:hover{color:#fff;background:var(--danger);border-color:var(--danger)}
.btn-sm{height:28px;padding:0 10px;font-size:12.5px}
.btn-block{width:100%;height:40px;font-size:14px;font-weight:600}

.input,.select{
  width:100%;height:var(--h-ctl);padding:0 10px;
  border:1px solid var(--line-2);border-radius:var(--r);
  background:var(--white);color:var(--txt);font-size:13.5px;outline:none;
  transition:border-color .15s,box-shadow .15s;
  -webkit-appearance:none;appearance:none;
}
.input:hover,.select:hover{border-color:#c9ced6}
.input:focus,.select:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(24,160,88,.14)}
.input::placeholder{color:var(--txt-4)}
.input[disabled]{background:var(--line-3);color:var(--txt-3);cursor:not-allowed}
.select{
  padding-right:26px;cursor:pointer;
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23767c82' 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 9px center;
}
.inp-group{display:flex;gap:8px;align-items:center}
.inp-group .input{flex:1;min-width:0}

.chk{
  display:inline-flex;align-items:center;gap:7px;height:var(--h-ctl);
  font-size:13px;color:var(--txt-2);cursor:pointer;user-select:none;white-space:nowrap;
}
.chk input{width:14px;height:14px;accent-color:var(--primary);cursor:pointer;margin:0}

.ta{
  width:100%;display:block;padding:10px 12px;
  border:1px solid var(--line-2);border-radius:var(--r);
  background:var(--white);color:var(--txt);
  font-size:13.5px;line-height:1.75;resize:vertical;outline:none;
  transition:border-color .15s,box-shadow .15s;
}
.ta:hover{border-color:#c9ced6}
.ta:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(24,160,88,.14)}
.ta::placeholder{color:var(--txt-4)}
.ta[readonly]{background:#fbfcfd;color:var(--txt-2)}
.ta[readonly]:focus{border-color:var(--line-2);box-shadow:none}

.tag{
  display:inline-flex;align-items:center;height:22px;padding:0 7px;
  border-radius:var(--r-sm);border:1px solid var(--primary-line);
  background:var(--primary-soft);color:var(--primary-p);
  font-size:11.5px;font-weight:500;line-height:1;white-space:nowrap;
}
.tag.green{background:var(--primary-soft);border-color:var(--primary-line);color:var(--primary-p)}
.tag.orange{background:var(--warning-soft);border-color:var(--warning-line);color:#a86a10}
.tag.red{background:var(--danger-soft);border-color:var(--danger-line);color:var(--danger)}
.tag.gray{background:var(--info-soft);border-color:var(--line-2);color:var(--txt-3)}

/* ============================================================
   登录
   ============================================================ */
.login{
  min-height:100vh;display:flex;align-items:center;justify-content:center;
  padding:40px 16px;background:var(--bg);
}
.login-card{
  width:100%;max-width:392px;background:var(--white);
  border:1px solid var(--line);border-radius:var(--r-card);
  padding:32px 32px 20px;box-shadow:var(--shadow);
}
.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:24px}
img.logo{width:38px;height:38px;display:block;flex:none;object-fit:contain}
.login-brand h1{font-size:16px;font-weight:600;line-height:1.3}
.login-brand p{font-size:12.5px;color:var(--txt-3);margin-top:2px}

.f-item{margin-bottom:16px}
.f-item>label{display:block;font-size:12.5px;color:var(--txt-2);margin-bottom:6px;font-weight:500}
.f-item .input{height:40px;font-size:14px}
.f-err{
  display:none;margin:0 0 12px;padding:8px 10px;
  background:var(--danger-soft);border:1px solid var(--danger-line);border-radius:var(--r);
  color:var(--danger);font-size:12.5px;line-height:1.5;
}
.f-err.show{display:block}
.login-foot{
  margin-top:18px;padding-top:14px;border-top:1px solid var(--line-3);
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  font-size:11.5px;color:var(--txt-3);
}
.login-foot .mono{color:var(--txt-4);font-size:11px}

/* ============================================================
   主框架
   ============================================================ */
.layout{min-height:100vh}
.aside{
  position:fixed;left:0;top:0;bottom:0;width:var(--side-w);z-index:20;
  background:var(--white);border-right:1px solid var(--line);
  display:flex;flex-direction:column;
}
.aside{
  width:var(--side-w);
  box-shadow:1px 0 0 rgba(31,34,37,.02);
}
.aside-brand{
  height:var(--h-head);flex:none;display:flex;align-items:center;gap:10px;
  padding:0 14px;border-bottom:1px solid var(--line-3);overflow:hidden;
}
.aside-brand .brand-logo{
  width:30px;height:30px;flex:none;display:grid;place-items:center;
  border-radius:var(--r-card);background:var(--primary-soft);
}
.aside-brand img.logo{width:21px;height:21px;display:block}
.aside-brand .brand-txt{min-width:0;display:flex;flex-direction:column;justify-content:center}
.aside-brand b{font-size:13.5px;font-weight:600;line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.aside-brand .brand-txt span{font-size:11px;color:var(--txt-3);line-height:1.4}

.menu{flex:1;overflow-y:auto;padding:10px 8px 12px}
.menu-cap{
  font-size:11px;font-weight:500;color:var(--txt-4);letter-spacing:.06em;
  line-height:1.5;padding:2px 10px 8px;
}
.menu-item{
  position:relative;display:flex;align-items:center;gap:10px;
  height:40px;padding:0 10px;margin-bottom:2px;border-radius:var(--r);
  font-size:13.5px;line-height:1;color:var(--txt-2);cursor:pointer;user-select:none;
  transition:background-color .14s,color .14s;
}
.menu-item .mi{
  width:18px;height:18px;flex:none;display:flex;align-items:center;justify-content:center;
  color:var(--txt-3);transition:color .14s;
}
.menu-item .mi svg{width:18px;height:18px;display:block}
.menu-item .mn{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.menu-item:hover{background:var(--line-3);color:var(--txt)}
.menu-item:hover .mi{color:var(--txt-2)}
.menu-item.on{background:var(--primary-soft);color:var(--primary-p);font-weight:600}
.menu-item.on .mi{color:var(--primary-p)}
.menu-item:focus-visible{outline:2px solid var(--primary-line);outline-offset:1px}

.aside-foot{
  flex:none;margin:8px;padding:10px 12px;border-radius:var(--r);
  border:1px solid var(--line);background:#fbfcfd;
  font-size:11.5px;color:var(--txt-3);line-height:1.6;
}
.aside-foot .dot-line{display:flex;align-items:center;gap:6px;color:var(--txt-2);font-weight:500;line-height:1.6}
.aside-foot .staff-line{padding-left:12px;font-variant-numeric:tabular-nums}
.dot-mini{width:6px;height:6px;border-radius:50%;background:var(--success);display:inline-block;flex:none}
.dot-mini.warn{background:var(--warning)}
.dot-mini.bad{background:var(--danger)}

.body{margin-left:var(--side-w);min-height:100vh;display:flex;flex-direction:column}

/* 顶栏 */
.header{
  position:sticky;top:0;z-index:15;height:var(--h-head);flex:none;
  background:var(--white);border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:12px;padding:0 20px;
}
.crumb{font-size:13px;color:var(--txt-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.crumb b{color:var(--txt);font-weight:600}
.crumb .sep{margin:0 6px;color:var(--txt-4)}
.header-right{margin-left:auto;display:flex;align-items:center;gap:8px;flex:none}

.hb,.expire{
  display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 9px;
  border-radius:var(--r-sm);border:1px solid var(--line-2);background:#fbfcfd;
  font-size:12px;color:var(--txt-2);white-space:nowrap;
}
.hb .dot{width:6px;height:6px;border-radius:50%;background:var(--success);flex:none}
.hb.warn,.expire.warn{background:var(--warning-soft);border-color:var(--warning-line);color:#a86a10}
.hb.warn .dot{background:var(--warning)}
.hb.bad,.expire.bad{background:var(--danger-soft);border-color:var(--danger-line);color:var(--danger)}
.hb.bad .dot{background:var(--danger)}
.hb em{font-style:normal;color:var(--txt-4);font-size:11px}
.expire{background:var(--primary-soft);border-color:var(--primary-line);color:var(--primary-p)}
.expire b{font-weight:600}
.expire .cd{font-variant-numeric:tabular-nums;opacity:.85}

.who{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--txt-2);white-space:nowrap;padding-left:4px}
.who .avatar{
  width:28px;height:28px;border-radius:50%;background:var(--primary-soft);color:var(--primary-p);
  display:grid;place-items:center;font-size:12.5px;font-weight:600;flex:none;
}
.who .sub{font-size:11.5px;color:var(--txt-3)}

.menu-toggle{display:none;width:32px;height:32px;border:1px solid var(--line-2);
  border-radius:var(--r);background:var(--white);align-items:center;justify-content:center;cursor:pointer;
  color:var(--txt-2);padding:0}
.menu-toggle svg{width:18px;height:18px;display:block}

/* ============================================================
   内容区（统一 8px 栅格、统一 16px 间距）
   ============================================================ */
.content{
  flex:1;width:100%;max-width:1400px;margin:0 auto;
  padding:20px 20px 32px;min-width:0;
}
.page-head{margin-bottom:16px;display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap}
.page-head h2{font-size:18px;font-weight:600;line-height:1.4;letter-spacing:-.1px}
.page-head p{font-size:12.5px;color:var(--txt-3);margin:0 0 1px}

/* 卡片：统一描边 + 独立卡头 */
.card{
  background:var(--white);border:1px solid var(--line);border-radius:var(--r-card);
  margin-bottom:var(--gap);box-shadow:var(--shadow);overflow:hidden;
}
.card-head{
  min-height:48px;padding:0 16px;display:flex;align-items:center;gap:10px;
  border-bottom:1px solid var(--line-3);
}
.card-head h3{font-size:14px;font-weight:600;color:var(--txt);line-height:1.4}
.card-head .r{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.card-body{padding:16px}
.card-body.tight{padding:0}

/* 统计卡：等高、等宽 */
.stat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--gap);margin-bottom:var(--gap)}
.stat{
  background:var(--white);border:1px solid var(--line);border-radius:var(--r-card);
  padding:14px 16px;min-width:0;box-shadow:var(--shadow);
}
.stat .k{font-size:12.5px;color:var(--txt-3);display:flex;align-items:center;gap:5px;line-height:1.5}
.stat .v{
  font-size:24px;line-height:1.35;font-weight:600;color:var(--txt);margin-top:4px;
  font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:-.4px;
}
.stat .v small{font-size:12px;font-weight:400;color:var(--txt-3);margin-left:4px;letter-spacing:0}

/* 工具行：栅格对齐，标签与控件分两行、底部对齐 */
.toolbar{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr)) minmax(0,1.35fr) auto;
  gap:12px;align-items:end;
}
.tb-item{display:flex;flex-direction:column;gap:6px;min-width:0}
.tb-item>span{font-size:12px;color:var(--txt-3);line-height:1.2;height:15px}
.tb-item.grow{min-width:0}
.tb-actions{display:flex;gap:8px;align-items:end}

/* 编辑区：两栏等高 */
.editor-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap);margin-bottom:var(--gap);align-items:stretch}
.editor{
  background:var(--white);border:1px solid var(--line);border-radius:var(--r-card);
  display:flex;flex-direction:column;min-width:0;overflow:hidden;box-shadow:var(--shadow);
}
.editor-head{
  height:48px;flex:none;display:flex;align-items:center;gap:8px;padding:0 16px;
  border-bottom:1px solid var(--line-3);background:#fcfcfd;
}
.editor-head h3{font-size:13.5px;font-weight:600;white-space:nowrap}
.editor-head .r{margin-left:auto;display:flex;gap:6px;align-items:center;flex-wrap:nowrap}
.editor-body{padding:12px 16px 0;flex:1;display:flex;min-height:0}
.editor-body .ta{
  flex:1;min-height:300px;background:var(--white);border-color:var(--line);
  border-radius:var(--r);resize:none;line-height:1.9;
}
.editor-foot{
  flex:none;height:40px;padding:0 16px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  border-top:1px solid var(--line-3);font-size:11.5px;color:var(--txt-3);background:#fcfcfd;
}
.editor-foot b{color:var(--txt-2);font-weight:600;font-variant-numeric:tabular-nums}
.hint{font-size:12.5px;color:var(--txt-3);line-height:1.8;margin-top:12px}
.hint code{
  background:var(--line-3);border-radius:3px;padding:1px 5px;
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11.5px;color:var(--txt-2);
}

/* 表格：卡头式表头、行高统一 */
.table-scroll{overflow-x:auto}
table.tb{width:100%;border-collapse:collapse;font-size:13px;table-layout:fixed}
table.tb th{
  color:var(--txt-3);font-weight:500;text-align:left;white-space:nowrap;font-size:12px;
  height:42px;padding:0 16px;background:#fafbfc;border-bottom:1px solid var(--line);
}
table.tb td{
  height:48px;padding:0 16px;border-bottom:1px solid var(--line-3);
  color:var(--txt-2);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
table.tb tbody tr:last-child td{border-bottom:0}
table.tb tbody tr:hover td{background:#fafbfc}
table.tb .num{font-variant-numeric:tabular-nums;text-align:right}
table.tb th.num{text-align:right}
table.tb .ops{white-space:nowrap;overflow:visible}
table.tb .ops a{color:var(--primary-p);cursor:pointer;font-size:12.5px;margin-right:12px;font-weight:500}
table.tb .ops a:last-child{margin-right:0}
table.tb .ops a:hover{text-decoration:underline}
table.tb .ops a.danger{color:var(--danger)}
table.tb .snippet{color:var(--txt-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.empty{padding:48px 16px;text-align:center;color:var(--txt-3);font-size:13px}
.loading-row{padding:32px;text-align:center;color:var(--txt-3);font-size:13px}

.pager{
  display:flex;align-items:center;gap:6px;padding:12px 16px;flex-wrap:wrap;
  border-top:1px solid var(--line-3);background:#fcfcfd;
}
.pager .info{font-size:12.5px;color:var(--txt-3);margin-right:auto}
.pager button{
  height:28px;min-width:28px;padding:0 8px;
  border:1px solid var(--line-2);background:var(--white);border-radius:var(--r-sm);
  color:var(--txt-2);font-size:12.5px;cursor:pointer;transition:.14s;
}
.pager button:hover:not([disabled]){color:var(--primary-p);border-color:var(--primary-line);background:var(--primary-soft)}
.pager button.on{background:var(--primary);border-color:var(--primary);color:#fff}
.pager button[disabled]{opacity:.45;cursor:not-allowed}

/* 信息栅格：整块描边 + 分隔线，不用一堆小色块 */
.kv{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--white);
}
.kv .row{
  padding:12px 14px;min-width:0;
  border-right:1px solid var(--line-3);border-bottom:1px solid var(--line-3);
}
.kv .row:nth-child(3n){border-right:0}
.kv .k{font-size:12px;color:var(--txt-3);margin-bottom:4px;line-height:1.4}
.kv .v{font-size:13.5px;color:var(--txt);word-break:break-all;font-weight:500;line-height:1.5}
.kv .v.mono{font-size:12.5px;font-weight:400}

.progress{height:6px;background:var(--line-3);border-radius:3px;overflow:hidden;margin-top:8px}
.progress i{display:block;height:100%;background:var(--primary);border-radius:3px;transition:width .3s}

/* 话术库 */
.cat-row{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 16px}
.cat{
  display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;
  border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--white);
  color:var(--txt-2);font-size:12.5px;cursor:pointer;user-select:none;transition:.14s;
}
.cat:hover{color:var(--primary-p);border-color:var(--primary-line);background:var(--primary-soft)}
.cat.on{background:var(--primary-soft);border-color:var(--primary-line);color:var(--primary-p);font-weight:600}
.cat em{font-style:normal;font-size:11px;color:var(--txt-3)}
.cat.on em{color:var(--primary-p);opacity:.8}

.phrase-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:12px}
.phrase-card{
  border:1px solid var(--line-2);border-radius:var(--r);padding:12px 14px;
  display:flex;flex-direction:column;gap:8px;background:var(--white);transition:.15s;
}
.phrase-card:hover{border-color:var(--primary-line);box-shadow:0 2px 10px -6px rgba(31,34,37,.2)}
.ph-hd{display:flex;align-items:center;gap:8px;min-width:0}
.ph-hd b{font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ph-body{
  font-size:12.5px;color:var(--txt-3);line-height:1.7;min-height:42px;max-height:62px;overflow:hidden;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
}
.ph-meta{display:flex;gap:10px;flex-wrap:wrap;font-size:11.5px;color:var(--txt-4)}
.ph-ops{display:flex;gap:6px;margin-top:auto;padding-top:2px}

/* 说明 */
.doc{font-size:13.5px;color:var(--txt-2);line-height:1.9}
.doc h4{font-size:13.5px;color:var(--txt);margin:20px 0 6px;font-weight:600}
.doc h4:first-child{margin-top:0}
.doc ol,.doc ul{margin:0;padding-left:20px}
.doc li{margin:4px 0}
.doc .code{
  background:#fafbfc;border:1px solid var(--line);border-radius:var(--r);padding:10px 12px;
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;color:var(--txt-2);overflow-x:auto;margin:8px 0;
}

/* 弹层 */
.mask{position:fixed;inset:0;z-index:60;background:rgba(31,34,37,.42);display:flex;align-items:center;justify-content:center;padding:20px}
.modal{
  width:100%;max-width:760px;max-height:86vh;background:var(--white);border-radius:var(--r-card);
  display:flex;flex-direction:column;overflow:hidden;box-shadow:var(--shadow-pop);
}
.modal-head{flex:none;height:52px;padding:0 16px;display:flex;align-items:center;border-bottom:1px solid var(--line-3)}
.modal-head h3{font-size:14.5px;font-weight:600}
.modal-head .x{margin-left:auto;cursor:pointer;color:var(--txt-3);font-size:20px;line-height:1;padding:2px 4px;border-radius:var(--r-sm)}
.modal-head .x:hover{color:var(--txt);background:var(--line-3)}
.modal-body{padding:16px;overflow:auto}
.modal-body .blk{margin-bottom:14px}
.modal-body .blk:last-child{margin-bottom:0}
.modal-body .blk .k{font-size:12px;color:var(--txt-3);margin-bottom:6px}
.modal-body .ta{min-height:120px}
.modal-foot{flex:none;padding:12px 16px;display:flex;gap:8px;justify-content:flex-end;border-top:1px solid var(--line-3);background:#fcfcfd}

.toast{
  position:fixed;left:50%;top:16px;transform:translate(-50%,-10px);z-index:99;
  padding:8px 14px 8px 30px;border-radius:var(--r);font-size:13px;line-height:1.5;
  background:var(--white);color:var(--txt-2);border:1px solid var(--line-2);
  box-shadow:var(--shadow-pop);max-width:82vw;
  opacity:0;pointer-events:none;transition:opacity .18s,transform .18s;
}
.toast:before{content:"";position:absolute;left:12px;top:50%;width:6px;height:6px;margin-top:-3px;border-radius:50%;background:var(--success)}
.toast.show{opacity:1;transform:translate(-50%,0)}
.toast.err{border-color:var(--danger-line);color:var(--danger);background:var(--danger-soft)}
.toast.err:before{background:var(--danger)}
.toast.warn{border-color:var(--warning-line);color:#a86a10;background:var(--warning-soft)}
.toast.warn:before{background:var(--warning)}

.drawer-mask{display:none}

/* ============================================================
   响应式
   ============================================================ */
@media (max-width:1280px){
  .toolbar{grid-template-columns:repeat(3,minmax(0,1fr)) auto}
  .tb-item.grow{grid-column:1 / -1}
}
@media (max-width:1180px){
  .kv{grid-template-columns:repeat(2,minmax(0,1fr))}
  .kv .row:nth-child(3n){border-right:1px solid var(--line-3)}
  .kv .row:nth-child(2n){border-right:0}
}
@media (max-width:980px){
  .aside{
    width:min(80vw,264px);padding-bottom:env(safe-area-inset-bottom);
    box-shadow:2px 0 18px rgba(31,34,37,.10);
    transform:translateX(-100%);transition:transform .22s ease;
  }
  .layout.drawer .aside{transform:none}
  .layout.drawer .drawer-mask{display:block;position:fixed;inset:0;z-index:19;background:rgba(31,34,37,.35)}
  .body{margin-left:0}
  .menu-toggle{display:inline-flex}
  .editor-grid{grid-template-columns:1fr}
  .editor-body .ta{min-height:200px}
  .stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:720px){
  .content{padding:16px 12px 24px}
  .header{padding:0 12px;gap:8px}
  .hb em,.expire .cd{display:none}
  .who .sub{display:none}
  .crumb{font-size:12.5px}
  .page-head h2{font-size:17px}
  .stat{padding:12px 14px}
  .stat .v{font-size:20px}
  .kv{grid-template-columns:1fr}
  .kv .row{border-right:0}
  .toolbar{grid-template-columns:minmax(0,1fr)}
  .tb-item.grow{grid-column:1 / -1}
  .tb-actions{grid-column:1 / -1;justify-content:stretch;display:grid;grid-template-columns:1fr 1fr}
  .tb-actions .btn{width:100%;min-width:0}
  .crumb i,.crumb .sep{display:none}
  .login-card{padding:26px 20px 18px}
  table.tb{table-layout:auto}
  table.tb th,table.tb td{padding:0 10px}
}
@media (max-width:560px){
  .who{display:none}
  .crumb{display:none}
  .header-right{margin-left:auto}
  .expire .cd{display:none}
  .hb em{display:none}
  .who>span:not(.avatar){display:none}
  .who .avatar{width:26px;height:26px}
  .phrase-grid{grid-template-columns:1fr}
  .editor-body .ta{min-height:170px}
}
