/* =========================================================
   小红书每日数据统计 · 团队版
   ========================================================= */
:root{
  --red:#FF1B6D;
  --red-dark:#e61560;
  --red-soft:#fff1f6;
  --ink:#18181b;
  --ink-2:#52525b;
  --ink-3:#9ca3af;
  --line:#ececf0;
  --line-2:#e4e4e7;
  --bg:#f6f6f8;
  --card:#ffffff;
  --up:#e5342a;
  --down:#12a150;
  --r:14px;
  --r-sm:10px;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--ink);font-size:14px;line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
button,input,select,textarea{font-family:inherit;font-size:inherit}
code{background:#f4f4f6;border-radius:5px;padding:1px 5px;font-size:12.5px;font-family:Menlo,Consolas,monospace;color:#c2185b}
[hidden]{display:none !important}
.mt12{margin-top:12px}
.mt16{margin-top:16px}
.app{max-width:1320px;margin:0 auto;padding:26px 22px 60px}

/* ---------- 启动遮罩 ---------- */
.boot{
  position:fixed;inset:0;z-index:9999;background:var(--bg);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;
}
.boot-logo{
  width:52px;height:52px;border-radius:16px;background:linear-gradient(135deg,#FF1B6D,#ff6b9d);
  color:#fff;display:grid;place-items:center;font-size:22px;font-weight:800;
  box-shadow:0 6px 20px rgba(255,27,109,.3);animation:pulse 1.4s ease-in-out infinite;
}
@keyframes pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.92);opacity:.75}}
.boot-text{font-size:13.5px;color:var(--ink-3)}

/* ---------- 登录 / 初始化 ---------- */
.auth-screen{
  position:fixed;inset:0;z-index:9000;background:var(--bg);
  display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;overflow:auto;
}
.auth-card{
  width:100%;max-width:400px;background:#fff;border:1px solid var(--line);border-radius:18px;
  padding:30px 30px 26px;box-shadow:0 10px 40px rgba(16,24,40,.08);
}
.auth-brand{display:flex;align-items:center;gap:12px;margin-bottom:24px}
.auth-brand h1{font-size:16.5px;font-weight:700;letter-spacing:-.3px;line-height:1.3}
.auth-sub{font-size:12px;color:var(--ink-3);margin-top:2px}
.auth-card .field{margin-bottom:15px}
.auth-card .field label{display:block;font-size:12.5px;color:var(--ink-2);margin-bottom:6px;font-weight:500}
.auth-card .field input{
  width:100%;padding:11px 13px;border:1px solid var(--line-2);border-radius:var(--r-sm);
  font-size:14.5px;background:#fafafa;transition:.15s;color:var(--ink);
}
.auth-card .field input:focus{outline:none;border-color:var(--red);background:#fff;box-shadow:0 0 0 3px rgba(255,27,109,.09)}
.auth-note{
  background:var(--red-soft);border:1px solid #ffdcea;border-radius:var(--r-sm);
  padding:11px 13px;font-size:12.5px;color:#a8124b;line-height:1.65;margin-bottom:20px;
}
.auth-error{
  margin-top:14px;background:#fef2f2;border:1px solid #fbd5d5;color:#c62828;
  border-radius:var(--r-sm);padding:10px 13px;font-size:13px;line-height:1.6;
}
.auth-foot{font-size:12px;color:var(--ink-3);margin-top:14px;text-align:center;line-height:1.7}
.auth-copy{font-size:12px;color:var(--ink-3);margin-top:20px}

/* ---------- 按钮 ---------- */
.btn{
  padding:8px 14px;border-radius:var(--r-sm);border:1px solid var(--line-2);background:#fff;color:var(--ink);
  font-size:13px;font-weight:500;cursor:pointer;transition:.15s;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;
}
.btn:hover{border-color:#cfcfd6;background:#fafafa}
.btn:active{transform:translateY(1px)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn.primary{background:var(--red);border-color:var(--red);color:#fff;box-shadow:0 2px 8px rgba(255,27,109,.22)}
.btn.primary:hover{background:var(--red-dark);border-color:var(--red-dark)}
.btn.sm{padding:5px 11px;font-size:12.5px;border-radius:8px}
.btn.lg{padding:11px 26px;font-size:14.5px;font-weight:600;border-radius:11px}
.btn.block{width:100%;margin-top:8px}
.btn.danger{color:#dc2626;border-color:#fbd5d5}
.btn.danger:hover{background:#fef4f4;border-color:#f5b5b5}
.btn-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}

/* ---------- header ---------- */
.hd{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:20px}
.hd h1{font-size:19px;font-weight:700;letter-spacing:-.4px;display:flex;align-items:center;gap:10px}
.logo{
  width:34px;height:34px;border-radius:10px;background:linear-gradient(135deg,#FF1B6D,#ff6b9d);
  color:#fff;display:grid;place-items:center;font-size:15px;font-weight:800;flex:none;
  box-shadow:0 3px 10px rgba(255,27,109,.28);
}
.ver{font-size:11px;font-weight:600;color:var(--red);background:var(--red-soft);border-radius:20px;padding:3px 9px;letter-spacing:0}
.hd-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.save-state{font-size:12px;color:var(--ink-3);transition:opacity .3s}
.who{
  display:flex;align-items:center;gap:9px;background:#fff;border:1px solid var(--line);
  border-radius:12px;padding:6px 8px 6px 10px;
}
.who-avatar{
  width:28px;height:28px;border-radius:50%;background:var(--red-soft);color:var(--red);
  display:grid;place-items:center;font-size:12.5px;font-weight:700;flex:none;
}
.who-meta{display:flex;flex-direction:column;line-height:1.25;margin-right:2px}
.who-meta b{font-size:13px;font-weight:600}
.who-meta i{font-size:11px;color:var(--ink-3);font-style:normal}

/* ---------- tabs ---------- */
.tabs{display:flex;gap:4px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:4px;margin-bottom:20px;width:fit-content;max-width:100%;overflow-x:auto;box-shadow:0 1px 2px rgba(16,24,40,.03)}
.tab{padding:8px 16px;border-radius:9px;border:none;background:transparent;color:var(--ink-2);font-size:13.5px;font-weight:500;cursor:pointer;transition:.15s;white-space:nowrap}
.tab:hover{background:#f4f4f6;color:var(--ink)}
.tab.active{background:var(--red);color:#fff;font-weight:600;box-shadow:0 2px 8px rgba(255,27,109,.25)}

/* ---------- panels ---------- */
.panel{display:none;animation:fade .22s ease}
.panel.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.panel > .card + .card,.panel > .card + .kpis,.panel > .kpis + .card{margin-top:16px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:18px;box-shadow:0 1px 2px rgba(16,24,40,.03)}
.card-hd{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.card-hd h3{font-size:14.5px;font-weight:650;letter-spacing:-.2px}
.hint{font-size:12px;color:var(--ink-3)}
.desc{font-size:13px;color:var(--ink-2);margin-bottom:14px;line-height:1.75}

/* ---------- toolbar ---------- */
.toolbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:14px 18px}
.toolbar.bare{padding:0 0 14px;border:none;background:none;box-shadow:none}
.tb-group{display:flex;align-items:center;gap:7px}
.tb-label{font-size:12.5px;color:var(--ink-3)}
.tb-sep{color:var(--ink-3)}
.tb-spacer{flex:1}
.mini-input,.mini-select{padding:6px 10px;border:1px solid var(--line-2);border-radius:8px;background:#fafafa;font-size:12.5px;color:var(--ink);transition:.15s}
.mini-input:focus,.mini-select:focus{outline:none;border-color:var(--red);background:#fff;box-shadow:0 0 0 3px rgba(255,27,109,.08)}

/* ---------- status bar ---------- */
.status-bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:12px 18px;margin:16px 0;font-size:13px;box-shadow:0 1px 2px rgba(16,24,40,.03)}
.status-bar .dot{width:7px;height:7px;border-radius:50%;background:var(--red);flex:none;box-shadow:0 0 0 3px rgba(255,27,109,.14)}
.chip{font-size:12px;padding:4px 11px;border-radius:20px;background:#fff5f8;color:var(--red);border:1px solid #ffdce8;cursor:pointer;font-weight:500}
.chip:hover{background:#ffe8f0}
.chip.done{background:#f0fbf5;color:#12a150;border-color:#c9ecd8;cursor:default}

/* ---------- kpi ---------- */
.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(178px,1fr));gap:12px}
.kpi{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:15px 16px 14px;position:relative;overflow:hidden;box-shadow:0 1px 2px rgba(16,24,40,.03)}
.kpi::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--kc,var(--red))}
.kpi .kl{font-size:12px;color:var(--ink-3);margin-bottom:7px}
.kpi .kv{font-size:23px;font-weight:700;letter-spacing:-.7px;font-variant-numeric:tabular-nums;line-height:1.15}
.kpi .ks{font-size:11.5px;color:var(--ink-3);margin-top:6px;font-variant-numeric:tabular-nums}
.delta{font-weight:600;font-variant-numeric:tabular-nums}
.delta.up{color:var(--up)}
.delta.down{color:var(--down)}
.delta.flat{color:var(--ink-3)}

/* ---------- chart ---------- */
.chart-wrap{width:100%;position:relative;min-height:280px}
.chart-wrap svg{display:block;width:100%;overflow:visible}
.legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:12px;padding-left:4px}
.legend span{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-2)}
.legend i{width:9px;height:9px;border-radius:3px;display:inline-block;flex:none}
.chart-empty{display:grid;place-items:center;height:280px;color:var(--ink-3);font-size:13px}
#tip{position:fixed;z-index:99;pointer-events:none;background:rgba(24,24,27,.94);color:#fff;font-size:12px;padding:8px 11px;border-radius:8px;opacity:0;transition:opacity .12s;line-height:1.6;white-space:nowrap;box-shadow:0 6px 20px rgba(0,0,0,.22)}
#tip b{font-weight:600}
#tip .tt-row{display:flex;align-items:center;gap:6px}
#tip .tt-dot{width:7px;height:7px;border-radius:50%;display:inline-block}

/* ---------- table ---------- */
.table-scroll{overflow:auto;max-height:560px;border:1px solid var(--line);border-radius:var(--r-sm);margin-top:2px}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
th{text-align:right;padding:10px 13px;font-weight:600;color:var(--ink-2);font-size:12px;background:#fafafa;border-bottom:1px solid var(--line);white-space:nowrap;position:sticky;top:0;z-index:2}
th:first-child,td:first-child{text-align:left;position:sticky;left:0;background:#fff;z-index:1}
th:first-child{background:#fafafa;z-index:3}
th.l,td.l{text-align:left}
td{padding:10px 13px;border-bottom:1px solid #f4f4f6;white-space:nowrap;text-align:right;font-variant-numeric:tabular-nums;background:#fff}
tbody tr:hover td{background:#fcfcfe}
tbody tr:hover td:first-child{background:#fcfcfe}
tbody tr:last-child td{border-bottom:none}
tfoot td{background:#fafafa;font-weight:650;border-top:1px solid var(--line-2)}
.acc-tag{display:inline-flex;align-items:center;gap:6px}
.acc-dot{width:8px;height:8px;border-radius:50%;flex:none}
.row-actions{display:flex;gap:6px;justify-content:flex-end}
.icon-btn{border:none;background:transparent;color:var(--ink-3);cursor:pointer;padding:4px 6px;border-radius:6px;font-size:12.5px;transition:.15s;white-space:nowrap}
.icon-btn:hover{background:#f1f1f4;color:var(--ink)}
.icon-btn.del:hover{background:#fef2f2;color:#dc2626}
.empty-row td{text-align:center;color:var(--ink-3);padding:40px 10px !important;font-size:13px}
.note-cell{max-width:180px;overflow:hidden;text-overflow:ellipsis}
.tag{display:inline-block;font-size:11px;padding:2px 8px;border-radius:20px;background:#f4f4f6;color:var(--ink-2);font-weight:500}
.tag.admin{background:var(--red-soft);color:var(--red)}
.tag.off{background:#fef2f2;color:#dc2626}
.tag.on{background:#f0fbf5;color:#12a150}

/* ---------- forms ---------- */
.form-head{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));gap:14px;padding-bottom:4px}
.field label{display:block;font-size:12.5px;color:var(--ink-2);margin-bottom:6px;font-weight:500}
.field label .req{color:var(--red);margin-left:2px}
.field input,.field select{width:100%;padding:9px 11px;border:1px solid var(--line-2);border-radius:var(--r-sm);font-size:14px;background:#fafafa;transition:.15s;color:var(--ink)}
.field input:focus,.field select:focus{outline:none;border-color:var(--red);background:#fff;box-shadow:0 0 0 3px rgba(255,27,109,.08)}
.field input::placeholder{color:#c4c4cb}
.field-actions{display:flex;align-items:flex-end;gap:8px}
.field-actions .btn{flex:1}
.group-block{border-top:1px dashed var(--line-2);margin-top:20px;padding-top:16px}
.group-title{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:650;margin-bottom:13px;color:var(--ink)}
.group-title .bar{width:3px;height:14px;border-radius:2px;background:var(--gc,var(--red))}
.group-title .g-hint{font-size:11.5px;color:var(--ink-3);font-weight:400}
.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(152px,1fr));gap:14px}
.form-footer{display:flex;align-items:center;gap:14px;margin-top:24px;padding-top:18px;border-top:1px solid var(--line);flex-wrap:wrap}
.msg{font-size:12.5px;color:var(--ink-3)}
.msg.ok{color:#12a150}
.msg.err{color:#dc2626}
.assign-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:9px}
.assign-item{display:flex;align-items:center;gap:9px;border:1px solid var(--line-2);border-radius:var(--r-sm);padding:9px 12px;cursor:pointer;transition:.15s;background:#fafafa;font-size:13px}
.assign-item:hover{border-color:#d8d8de;background:#fff}
.assign-item.on{border-color:var(--red);background:var(--red-soft);color:#a8124b;font-weight:500}
.assign-item input{width:15px;height:15px;accent-color:var(--red);flex:none;cursor:pointer}
.assign-empty{font-size:12.5px;color:var(--ink-3);padding:8px 0}

/* ---------- accounts ---------- */
.acc-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));gap:12px;margin-top:4px}
.acc-card{border:1px solid var(--line);border-radius:var(--r);padding:14px 15px;position:relative;background:#fff;transition:.15s}
.acc-card:hover{border-color:#e0e0e6;box-shadow:0 3px 12px rgba(16,24,40,.06)}
.acc-card .ac-top{display:flex;align-items:center;gap:9px;margin-bottom:8px;padding-right:64px}
.acc-card .ac-name{font-weight:650;font-size:14px}
.acc-card .ac-meta{font-size:12px;color:var(--ink-3);line-height:1.9}
.acc-card .ac-meta b{color:var(--ink-2);font-weight:500}
.acc-card .ac-ops{position:absolute;top:11px;right:11px;display:flex;gap:2px}
.kv-list{font-size:13px;color:var(--ink-2);line-height:2.1}
.kv-list b{color:var(--ink);font-weight:600}

/* ---------- modal ---------- */
.modal{position:fixed;inset:0;z-index:9500;background:rgba(24,24,27,.42);display:flex;align-items:center;justify-content:center;padding:24px;backdrop-filter:blur(2px)}
.modal-card{width:100%;max-width:430px;background:#fff;border-radius:16px;padding:24px;box-shadow:0 20px 60px rgba(16,24,40,.22);max-height:85vh;overflow:auto}
.modal-card h3{font-size:15.5px;font-weight:650;margin-bottom:16px}
.modal-card .field{margin-bottom:14px}
.modal-card .field label{display:block;font-size:12.5px;color:var(--ink-2);margin-bottom:6px;font-weight:500}
.modal-card .field input{width:100%;padding:10px 12px;border:1px solid var(--line-2);border-radius:var(--r-sm);font-size:14px;background:#fafafa}
.modal-card .field input:focus{outline:none;border-color:var(--red);background:#fff;box-shadow:0 0 0 3px rgba(255,27,109,.08)}

/* ---------- toast ---------- */
.toast-wrap{position:fixed;top:20px;left:50%;transform:translateX(-50%);z-index:9999;display:flex;flex-direction:column;gap:9px;align-items:center;pointer-events:none}
.toast{background:rgba(24,24,27,.93);color:#fff;font-size:13px;padding:10px 18px;border-radius:11px;box-shadow:0 8px 26px rgba(0,0,0,.22);animation:toastIn .22s ease;max-width:86vw;text-align:center;line-height:1.6}
.toast.ok{background:#0f9d58}
.toast.err{background:#d93025}
@keyframes toastIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}

@media (max-width:700px){
  .app{padding:16px 13px 50px}
  .hd h1{font-size:16.5px}
  .kpis{grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:9px}
  .kpi .kv{font-size:19px}
  .toolbar{padding:12px 14px;gap:10px}
  .who-meta{display:none}
  .auth-card{padding:24px 20px}
}
