
/* ---------- 成长中心（桥接上游 WorkBuddy-Daily 脚本） ---------- */
.gwd-status{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gwd-strip{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px}
.gwd-strip:empty{display:none}
.gwd-sum{font-size:12px;color:var(--text-secondary)}
.gwd-sum b{color:var(--text-main);font-weight:700}
.gwd-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(236px,1fr));gap:12px;margin-top:14px}
.gwd-card{
  border:1px solid var(--line);border-left:3px solid var(--line);
  border-radius:var(--r-mid);background:var(--bg-card);padding:11px 13px;
}
.gwd-card.ok{border-left-color:var(--primary)}
.gwd-card.warn{border-left-color:var(--yellow)}
.gwd-top{display:flex;align-items:center;gap:7px;min-width:0}
.gwd-nick{font-size:12.5px;font-weight:600;color:var(--text-main);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gwd-metrics{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:8px;font-size:11px;color:var(--text-secondary)}
.gwd-metrics b{color:var(--text-main);font-weight:600}
.gwd-usage{margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gwd-bar{height:5px;border-radius:999px;background:#eef0f2;overflow:hidden;margin-top:9px}
.gwd-bar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--primary-2),var(--primary))}
.gwd-rest{
  margin-top:8px;font-size:10.5px;line-height:1.6;color:var(--text-muted);
  max-height:34px;overflow:hidden;
}
.gwd-log{
  margin-top:10px;max-height:260px;overflow:auto;background:var(--bg-sunken);
  border:1px solid var(--line-soft);border-radius:var(--r-mid);padding:10px 12px;
  font-family:ui-monospace,SFMono-Regular,Consolas,"Courier New",monospace;
  font-size:10.5px;line-height:1.65;color:var(--text-2);
  white-space:pre-wrap;word-break:break-all;
}

/* 工具类：mt-8/12/16/20 全站用了 26 处，之前只定义了 mb-*，它们一直在静默失效 */
.mt-8{margin-top:8px}.mt-12{margin-top:12px}.mt-16{margin-top:16px}.mt-20{margin-top:20px}
.mb-12{margin-bottom:12px}
.fs-11{font-size:11px}.fs-12{font-size:12px}
.muted{color:var(--text-secondary)}
.dim{color:var(--text-muted)}
.faint{color:var(--text-faint)}
.right{text-align:right}
.strong{font-weight:600;color:#2f2f2f}
.nowrap{white-space:nowrap}
.hidden{display:none !important}
.trunc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.clickable{cursor:pointer}
.divider{height:1px;background:var(--line);margin:16px 0}
.link{color:var(--primary-text);cursor:pointer;text-decoration:none}
.link:hover{text-decoration:underline}

/* ---------- 3. 按钮补充 ---------- */
.btn.sm{height:26px;padding:0 10px;font-size:11.5px}
.btn.danger{background:#fce9e6;color:#c9503f}
.btn.danger:hover{background:#f8dcd8}
.btn.ghost{background:transparent;color:#777}
.btn.ghost:hover{background:#f2f2f2}
.btn[disabled],.btn.disabled{opacity:.45;cursor:not-allowed;pointer-events:none}
.btn.primary{background:var(--primary);color:#fff}
.btn.primary:hover{background:#07947e}

/* ---------- 4. 表单 ---------- */
.field{display:flex;flex-direction:column;gap:6px}
.field label{font-size:11.5px;color:#8b8b8b}
.field .hint{font-size:10.5px;color:var(--text-faint);line-height:1.6}
textarea.input{
  min-height:82px;padding:9px 11px;line-height:1.6;resize:vertical;
  font-size:12px;height:auto;
}
select.input{padding:0 26px 0 11px;appearance:none;-webkit-appearance:none;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%23a8a8a8' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
  background-repeat:no-repeat;background-position:right 9px center;background-color:#f5f5f5}
.check{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:#666;cursor:pointer}
.check input{accent-color:var(--primary);width:14px;height:14px;cursor:pointer}

/* 「添加账号」表单：两列，窄屏塌成单列 */
.add-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 18px}
.add-form.wide{grid-template-columns:1fr}
@media (max-width:640px){
  .add-form{grid-template-columns:1fr}
}

/* ---------- 5. 表格容器 ---------- */
.table-wrap{margin-top:14px;overflow-x:auto}
.table-wrap::-webkit-scrollbar{height:6px}
.table-wrap::-webkit-scrollbar-thumb{background:#dcdcdc;border-radius:999px}
.table-wrap table{margin-top:0;min-width:860px}
.table-wrap.compact table{min-width:0}
.tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-left:auto}
.search{
  height:28px;min-width:180px;border:0;border-radius:8px;background:#f5f5f5;
  padding:0 12px;font-size:12px;color:#444;outline:0;
}
.search::placeholder{color:#b2b2b2}
.search:focus{background:#fff;box-shadow:inset 0 0 0 1px #d9efe9}
.sortable{cursor:pointer;user-select:none}
.sortable:hover{color:#666}
.sortable::after{content:"";display:inline-block;width:0}
.sortable.asc::after{content:" ↑";color:var(--primary-text)}
.sortable.desc::after{content:" ↓";color:var(--primary-text)}

/* 状态点 */
.sdot{width:7px;height:7px;border-radius:50%;display:inline-block;flex:0 0 auto}
.sdot.ok{background:#0aad91}
.sdot.cool{background:var(--yellow)}
.sdot.dead{background:var(--red)}
.sdot.off{background:#c9c9c9}
.sdot.busy{background:var(--blue)}

/* 可点行 */
tbody tr.rowlink{cursor:pointer}

/* ---------- 6. 空态 / 加载 ---------- */
.empty{padding:46px 20px;text-align:center;color:var(--text-faint);font-size:12.5px}
.empty .ico{opacity:.5;margin-bottom:10px}
.empty h4{margin:0 0 6px;font-size:13.5px;color:#999;font-weight:500}
.empty p{margin:0;font-size:11.5px;line-height:1.8;color:#b5b5b5}
.skeleton{
  height:12px;border-radius:6px;
  background:linear-gradient(90deg,#f0f0f2 25%,#e7e7ea 37%,#f0f0f2 63%);
  background-size:400% 100%;animation:sk 1.3s ease-in-out infinite;
}
@keyframes sk{0%{background-position:100% 50%}100%{background-position:0 50%}}
.loading-line{padding:26px 0;text-align:center;color:var(--text-faint);font-size:12px}

/* ---------- 7. 模态 / 抽屉 ---------- */
.mask{
  position:fixed;inset:0;background:rgba(28,30,34,.32);z-index:90;
  display:flex;align-items:center;justify-content:center;padding:24px;
  animation:fade .16s ease-out;
}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{
  background:#fff;border-radius:var(--r-card);box-shadow:0 16px 48px rgba(0,0,0,.16);
  width:100%;max-width:560px;max-height:calc(100vh - 60px);
  display:flex;flex-direction:column;animation:pop .18s ease-out;
}
@keyframes pop{from{opacity:0;transform:translateY(8px) scale(.99)}to{opacity:1;transform:none}}
.modal.wide{max-width:820px}
.modal.xwide{max-width:1040px}
.modal-head{
  display:flex;align-items:center;gap:12px;padding:18px 22px 14px;
  border-bottom:1px solid var(--line);
}
.modal-head h3{margin:0;font-size:15px;font-weight:600;color:#222}
.modal-head .sub{font-size:11px;color:var(--text-muted)}
.modal-body{padding:20px 22px;overflow-y:auto;flex:1 1 auto}
.modal-foot{
  display:flex;align-items:center;gap:9px;padding:14px 22px;
  border-top:1px solid var(--line);justify-content:flex-end;
}
.x{
  width:28px;height:28px;border:0;background:#f5f5f5;border-radius:8px;color:#999;
  cursor:pointer;display:grid;place-items:center;
}
.x:hover{background:#ececec;color:#666}

.drawer-mask{position:fixed;inset:0;background:rgba(28,30,34,.24);z-index:91;animation:fade .16s}
.drawer{
  position:fixed;top:0;right:0;bottom:0;width:min(560px,92vw);background:#fff;
  z-index:92;box-shadow:-10px 0 40px rgba(0,0,0,.12);
  display:flex;flex-direction:column;animation:slide .2s ease-out;
}
@keyframes slide{from{transform:translateX(24px);opacity:.6}to{transform:none;opacity:1}}
.drawer .modal-head{flex:0 0 auto}
.drawer .modal-body{flex:1 1 auto}

/* KV 列表 */
.kv{display:grid;grid-template-columns:132px 1fr;row-gap:0}
.kv > div{
  padding:9px 0;border-bottom:1px solid var(--line-soft);font-size:12px;
  display:flex;align-items:center;gap:8px;min-width:0;
}
.kv > .k{color:#8f8f8f}
.kv > .v{color:#3a3a3a;word-break:break-all}
.kv > div:nth-last-child(-n+2){border-bottom:0}

/* ---------- 8. Toast ---------- */
#toasts{
  position:fixed;top:16px;left:50%;transform:translateX(-50%);z-index:200;
  display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;
}
.toast{
  background:#fff;border-radius:11px;box-shadow:0 8px 26px rgba(0,0,0,.13);
  padding:10px 16px;font-size:12.5px;color:#3a3a3a;
  display:flex;align-items:center;gap:9px;max-width:min(520px,90vw);
  animation:toastin .2s ease-out;pointer-events:auto;
}
@keyframes toastin{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.toast .bar{width:3px;height:16px;border-radius:2px;background:var(--primary);flex:0 0 auto}
.toast.err .bar{background:var(--red)}
.toast.warn .bar{background:var(--yellow)}
.toast.fadeout{opacity:0;transition:opacity .25s}

/* ---------- 9. 图表补充 ---------- */
.legend{display:flex;align-items:center;gap:18px;font-size:11px;color:#9a9a9a;flex-wrap:wrap}
.legend i{width:8px;height:8px;border-radius:2px;display:inline-block;margin-right:6px}
.spark{display:block;width:100%;overflow:visible}
.chart-scroll{overflow-x:auto;margin-top:14px}
.chart-scroll::-webkit-scrollbar{height:6px}
.chart-scroll::-webkit-scrollbar-thumb{background:#dcdcdc;border-radius:999px}
.minichart{position:relative;padding-left:42px}
.minichart .mini-y{
  position:absolute;left:0;top:0;width:34px;height:var(--mh,150px);
  font-size:10px;color:#c2c2c2;text-align:right;
}
.minichart .mini-y span{position:absolute;right:0;transform:translateY(-50%)}
.minichart .mini-plot{position:relative;height:var(--mh,150px)}
.minichart .mini-grid{
  position:absolute;inset:0;display:flex;flex-direction:column;
  justify-content:space-between;pointer-events:none;
}
.minichart .mini-grid i{display:block;height:1px;background:var(--grid)}
.minichart .mini-bars{position:absolute;inset:0;display:flex;align-items:flex-end;gap:2px}
.minichart .mini-bars .slot{
  flex:1 1 0;height:100%;display:flex;align-items:flex-end;
  justify-content:center;position:relative;min-width:4px;
}
.minichart .mini-bars .slot b{
  display:block;width:100%;max-width:22px;border-radius:3px 3px 0 0;
  background:linear-gradient(180deg,var(--primary-2),#0aa98f);min-height:1px;
}
.minichart .mini-bars .slot b.err{background:var(--red)}
.minichart .mini-x{display:flex;margin-top:7px;font-size:10px;color:#c0c0c0}
.minichart .mini-x span{flex:1 1 0;text-align:center;min-width:0;overflow:hidden;white-space:nowrap}

/* 环形进度 */
.ring{position:relative;display:inline-block}
.ring .rv{position:absolute;inset:0;display:grid;place-items:center;font-weight:600;color:#333}

/* 横向占比条 */
.pbar{display:flex;align-items:center;gap:12px;font-size:12px;margin-top:14px}
.pbar .pn{flex:0 0 118px;color:#3a3a3a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pbar .pb{flex:1 1 auto;min-width:50px}
.pbar .pv{flex:0 0 auto;color:#8f8f8f;font-size:11.5px;min-width:66px;text-align:right}

/* ---------- 10. Playground / 代码块 ---------- */
.chat-scroll{
  max-height:340px;overflow-y:auto;background:#fafafa;border-radius:var(--r-mid);
  padding:14px;display:flex;flex-direction:column;gap:11px;
}
.chat-scroll::-webkit-scrollbar{width:6px}
.chat-scroll::-webkit-scrollbar-thumb{background:#dcdcdc;border-radius:999px}
.msg{display:flex;gap:9px;font-size:12.5px;line-height:1.7}
.msg .who{
  flex:0 0 auto;width:34px;color:#9a9a9a;font-size:10.5px;padding-top:2px;text-align:right;
}
.msg .bubble{
  background:#fff;border-radius:10px;padding:9px 12px;color:#3a3a3a;
  white-space:pre-wrap;word-break:break-word;box-shadow:0 1px 3px rgba(0,0,0,.04);
  max-width:100%;
}
.msg.user .bubble{background:var(--primary-soft);color:#1d6b5c}
.msg.err .bubble{background:#fce9e6;color:#a8402f}
.msg.sys .bubble{background:#fff8e6;color:#8a6a12}
.msg .meta{font-size:10px;color:#b5b5b5;margin-top:6px}
pre.code{
  background:#fafafa;border-radius:var(--r-mid);padding:13px 15px;margin:0;
  font-family:Consolas,"SFMono-Regular",Menlo,monospace;font-size:11.5px;
  color:#3d3d3d;line-height:1.7;overflow-x:auto;white-space:pre;
}
pre.code::-webkit-scrollbar{height:6px}
pre.code::-webkit-scrollbar-thumb{background:#dcdcdc;border-radius:999px}
code.inline{
  background:#f2f2f4;border-radius:4px;padding:1px 5px;font-size:11.5px;
  font-family:Consolas,Menlo,monospace;color:#c9503f;
}

/* ---------- 11. 指标/统计补充 ---------- */
.stat-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px}
.stat-grid.c4{grid-template-columns:repeat(4,minmax(0,1fr))}
.stat-grid.c5{grid-template-columns:repeat(5,minmax(0,1fr))}
.c-green{color:var(--primary)}
.c-warn{color:var(--yellow)}

.tiny-bar{
  height:6px;border-radius:999px;background:#ededed;overflow:hidden;min-width:44px;
  display:inline-block;vertical-align:middle;
}
.tiny-bar i{display:block;height:100%;border-radius:999px;background:var(--primary)}

.pill-group{display:inline-flex;background:#f3f3f3;border-radius:8px;padding:2px;gap:1px}
.pill-group button{
  height:26px;padding:0 13px;border:0;background:transparent;border-radius:7px;
  font-size:12px;color:#6b6b6b;cursor:pointer;white-space:nowrap;
}
.pill-group button.on{background:#fff;color:#222;font-weight:600;box-shadow:0 1px 4px rgba(0,0,0,.08)}

.banner{
  border-radius:var(--r-mid);padding:12px 16px;font-size:12px;line-height:1.8;
  display:flex;gap:11px;align-items:flex-start;
}
.banner.warn{background:#fdf7e6;color:#8a6a12}
.banner.info{background:var(--primary-soft);color:#1d6b5c}
.banner.err{background:#fce9e6;color:#a8402f}
.banner b{font-weight:600}

/* ---------- 12. 全宽信息带（多列 KV） ---------- */
.kv-cols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px 30px;margin-top:16px}
.kv-cols.two{grid-template-columns:repeat(2,minmax(0,1fr))}
.kv-cols .cell{min-width:0;display:flex;flex-direction:column;gap:6px}
.kv-cols .cell.wide{grid-column:1/-1}
.kv-cols .k{
  font-size:10.5px;color:#a5a5a5;line-height:1.4;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.kv-cols .v{
  font-size:12px;color:#3a3a3a;line-height:1.55;
  word-break:break-all;display:flex;align-items:center;gap:8px;flex-wrap:wrap;
}
.kv-cols .v.mono{font-size:11.5px;letter-spacing:-.2px}
.kv-cols .v .ell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}

/* 域标签 */
.realm-tag{
  display:inline-block;font-size:9.5px;line-height:1.5;padding:1px 5px;border-radius:4px;
  background:#eef4ff;color:#4a76c4;letter-spacing:.3px;flex:0 0 auto;
}
.realm-tag.global{background:#f3eefb;color:#8b5cc0}

/* ---------- 13. 卡片内紧凑表 ---------- */
.mini-table{width:100%;border-collapse:collapse;table-layout:fixed;margin-top:0}
.mini-table th{
  font-size:10.5px;color:#a8a8a8;font-weight:400;text-align:left;
  padding:0 8px 9px;border-bottom:1px solid var(--line-soft);white-space:nowrap;
}
.mini-table td{
  font-size:11.5px;color:#444;height:34px;padding:0 8px;
  border-bottom:1px solid var(--line-soft);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.mini-table tr:last-child td{border-bottom:0}
.mini-table tbody tr:hover td{background:#fcfdfd}
.mini-table .rt,.mini-table th.rt{text-align:right}
.mini-table td.mname{color:#3a3a3a}
.mini-table td.dim2{color:#8f8f8f}
.model-table{table-layout:fixed}
.model-table th:nth-child(2),.model-table td:nth-child(2){width:62px}
.model-table th:nth-child(3),.model-table td:nth-child(3){width:74px}
.model-table th:nth-child(4),.model-table td:nth-child(4){width:80px}
.model-table th:nth-child(5),.model-table td:nth-child(5){width:86px}

/* 最近请求表：列宽固定，避免模型名被压到截断 */
.recent-table{table-layout:fixed}
.recent-table th:nth-child(1),.recent-table td:nth-child(1){width:118px}
.recent-table th:nth-child(3),.recent-table td:nth-child(3){width:64px}
.recent-table th:nth-child(4),.recent-table td:nth-child(4){width:72px}
.recent-table th:nth-child(5),.recent-table td:nth-child(5){width:84px}
.recent-table th:nth-child(6),.recent-table td:nth-child(6){width:74px}

/* ---------- 14. 响应式补充 ---------- */
@media (max-width:1199px){
  .stat-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
  .grid-2.uneven{grid-template-columns:1fr}
  .kv-cols{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:900px){
  .navbar{padding:0 18px}
  .grid-2{grid-template-columns:1fr}
  .stat-grid,.stat-grid.c4,.stat-grid.c5{grid-template-columns:repeat(2,minmax(0,1fr))}
  .kv{grid-template-columns:110px 1fr}
  .kv-cols,.kv-cols.two{grid-template-columns:1fr}
  .drawer{width:100vw}
}

/* ============================================================
   15. 积分与归因（本轮新增）
   ============================================================ */
/* 数值微标签：主值 + 单位后缀 */
.unitv{font-size:12px;color:var(--text-muted);font-weight:400;margin-left:3px}
.delta-up{color:var(--primary)}
.delta-down{color:var(--red)}
.delta-flat{color:var(--text-muted)}

/* Key 密文展示 */
.keychip{
  display:inline-flex;align-items:center;gap:7px;background:var(--bg-soft);
  border-radius:7px;padding:3px 9px;font-size:11.5px;color:var(--text-2);
  letter-spacing:-.2px;max-width:100%;
}
.keychip .tagline{
  font-size:9.5px;background:#fff;border-radius:4px;padding:1px 5px;color:var(--text-muted);
}
.keychip.builtin{background:var(--primary-soft-2);color:var(--primary-text)}
.keychip.off{opacity:.55;text-decoration:line-through}

/* Key 管理列表 */
.keyitem{
  display:flex;align-items:center;gap:12px;padding:12px 0;
  border-bottom:1px solid var(--line-soft);
}
.keyitem:last-child{border-bottom:0}
.keyitem .kname{flex:0 0 132px;font-size:12.5px;font-weight:500;color:var(--text-main);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.keyitem .kval{flex:1 1 auto;min-width:0}
.keyitem .kuse{flex:0 0 96px;font-size:11.5px;color:var(--text-secondary);text-align:right}
.keyitem .kact{flex:0 0 auto;display:flex;align-items:center;gap:6px}

/* 签到结果行 */
.ci-row{
  display:flex;align-items:center;gap:12px;padding:9px 0;
  border-bottom:1px solid var(--line-soft);font-size:12px;
}
.ci-row:last-child{border-bottom:0}
.ci-row .nick{flex:0 0 116px;font-weight:500;color:var(--text-main);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ci-row .st{flex:0 0 78px}
.ci-row .rem{flex:0 0 74px;text-align:right;color:var(--text-2);font-variant-numeric:tabular-nums}
.ci-row .dt{flex:1 1 auto;min-width:0;color:var(--text-muted);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 一键执行任务：进度弹窗里的任务行（与 .ci-row 同一套视觉语言） */
.task-row{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--line-soft);font-size:12px}
.task-row:last-child{border-bottom:0}
.task-row .tname{flex:0 0 92px;font-weight:500;color:var(--text-main)}
.task-row .tst{flex:0 0 76px}
.task-row .tstats{flex:1 1 auto;min-width:0;font-size:11px;color:var(--text-2);font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.task-row .tms{flex:0 0 52px;text-align:right;font-size:11px;color:var(--text-faint);font-variant-numeric:tabular-nums}
.task-row .tmore{flex:0 0 auto}
.task-row.dim{opacity:.55}
/* 自动化任务卡：手动触发按钮 + 仅定时标记 */
.auto-item .arun{margin-left:auto;flex:0 0 auto;display:flex;align-items:center;gap:8px;padding-left:8px}
.auto-item .adone{min-width:96px}
.auto-item .bar{flex:1 1 40px;min-width:24px}
.auto-item .atip{font-size:10.5px;color:var(--text-faint)}
/* 任务原始日志（activity 是 Go log 输出，需要等宽 + 可滚） */
.log-pre{
  margin-top:10px;max-height:320px;overflow:auto;background:var(--bg-sunken);
  border:1px solid var(--line-soft);border-radius:var(--r-mid);padding:10px 12px;
  font-family:ui-monospace,SFMono-Regular,Consolas,"Courier New",monospace;
  font-size:10.5px;line-height:1.7;color:var(--text-2);
  white-space:pre-wrap;word-break:break-all;
}

/* 空态里带链接时保持可点 */
.empty a{color:var(--primary-text)}

/* "基准建立中" 这类提示条：不抢眼但不隐藏 */
.hintbar{
  margin-top:14px;background:var(--bg-sunken);border:1px dashed var(--line);
  border-radius:var(--r-mid);padding:10px 14px;font-size:11px;line-height:1.7;color:var(--text-secondary);
}
.hintbar b{color:var(--text-main);font-weight:600}

/* ------------------------------------------------------------
   「添加账号」弹框：页签 + 本机账号行
   ------------------------------------------------------------ */
.acc-tabs{margin-bottom:12px}
.acc-login-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.acc-login-status{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.acc-sect{font-size:11.5px;color:var(--text-faint);margin:14px 0 6px;letter-spacing:.2px}
.acc-row{
  display:flex;align-items:center;gap:10px;padding:9px 11px;margin-bottom:6px;
  border:1px solid var(--line);border-radius:var(--r-small);background:#fff;
}
.acc-row:last-child{margin-bottom:0}
.acc-row.off{background:var(--bg-sunken);opacity:.78}
.acc-main{flex:1 1 auto;min-width:0}
.acc-name{display:flex;align-items:baseline;gap:8px;font-size:12.5px;color:var(--text-main)}
.acc-uid{font-size:10.5px;color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.acc-meta{display:flex;flex-wrap:wrap;gap:12px;font-size:11px;color:var(--text-secondary);margin-top:3px}
.acc-yes{color:var(--primary-text)}
.acc-no{color:#a97b0c}
.acc-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}
.tag{font-size:10px;line-height:16px;padding:0 6px;border-radius:99px;background:#f1f3f5;color:#79818a;white-space:nowrap}
.acc-srcgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:8px}
.acc-srccell{border:1px solid var(--line);border-radius:var(--r-small);padding:8px 10px;font-size:11.5px;color:var(--text-2);min-width:0}
.acc-srccell > div:first-child{color:var(--text-main)}
.acc-srccell .mono{font-size:10.5px;color:var(--text-faint);word-break:break-all;margin-top:2px}
.acc-count{color:var(--text-faint);font-weight:400}
.acc-note{color:#a97b0c;margin-top:2px}

/* ============================================================
   请求记录 · 来源概览条（概览 + 筛选合一）
   三分类口径：中转 / 面板 / 直连。dot 颜色与表格里的 badge 一一对应，
   点了就筛选、再点取消（不与下拉重复，少一个控件少一份口径漂移）。
   注意：.origin-chip 是 <button>，本项目没有全局 button 重置，
   所以 border / background / cursor 必须自己写全。
   ============================================================ */
.origin-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
/* 用 background-color 长写法而非 background 简写：jsdom 不展开简写，
   简写会让 runtime-test 算到 transparent 从而误判"样式丢了"（实测踩过）。 */
.origin-chip{
  display:inline-flex;align-items:center;gap:7px;
  height:28px;padding:0 12px;border:1px solid var(--line);border-radius:999px;
  background-color:var(--bg-card);color:var(--text-2);font-size:12px;
  cursor:pointer;white-space:nowrap;
  transition:border-color .14s,background-color .14s,color .14s;
}
.origin-chip:hover{border-color:var(--primary-2);color:var(--text-main)}
.origin-chip b{font-weight:600;color:var(--text-main);font-variant-numeric:tabular-nums}
.origin-chip.on{background-color:var(--primary-soft);border-color:var(--primary-2);color:var(--primary-text)}
.origin-chip.on b{color:var(--primary-text)}
.origin-dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex:none;background-color:var(--text-faint)}
.origin-dot.proxy{background-color:var(--primary)}
.origin-dot.panel{background-color:var(--blue)}
.origin-dot.direct{background-color:var(--text-faint)}
/* 推定来源（来源字段上线前的老记录）：虚线下划线 + 帮助光标，别让人误当成精确值 */
.badge.infer{text-decoration:underline dotted;text-underline-offset:2px;cursor:help}

/* ============================================================
   账号任务页（tasks.html）—— 签到 / 成长计划 完成情况
   全部用长写属性（background-color / border-*-color）：jsdom 不展开简写，
   简写会让 runtime-test 读到 transparent / 0 从而误判"样式丢了"（本项目已踩过）。
   另：.tb-card 用了 border-left-width + border-left-color 两条长写，
   而不是 border-left 简写，理由同上。
   ============================================================ */
.tb-msub{margin-top:4px;font-size:10.5px;color:var(--text-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.tb-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:16px}

.tb-card{
  display:flex;flex-direction:column;gap:10px;min-width:0;
  border:1px solid var(--line);border-left-width:3px;border-radius:var(--r-mid);
  padding:14px 16px;background-color:var(--bg-card);
}
.tb-card.ok{border-left-color:var(--primary)}
.tb-card.warn{border-left-color:var(--yellow)}
.tb-card.unknown{border-left-color:var(--text-faint)}

.tb-top{display:flex;align-items:center;gap:8px;min-width:0}
.tb-nick{font-size:13.5px;font-weight:600;color:var(--text-main);max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.tb-ci{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
/* 签到状态 chip：OK/ALREADY/FAIL/未查询 四态必须颜色可分，否则"签到失败"和"未查询"长得一样 */
.tb-ci-chip{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:99px;font-size:11px;white-space:nowrap}
.tb-ci-chip.ok{background-color:var(--primary-soft);color:var(--primary-text)}
.tb-ci-chip.already{background-color:var(--blue-soft);color:#3a6fd8}
.tb-ci-chip.fail{background-color:var(--red-soft);color:#c04a3c}
.tb-ci-chip.none{background-color:var(--bg-soft);color:var(--text-secondary)}
.tb-src{font-size:10.5px;color:var(--text-faint)}

.tb-metrics{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:11.5px;color:var(--text-2)}
.tb-metrics b{color:var(--text-main);font-weight:600;font-variant-numeric:tabular-nums}
.tb-usage{font-size:11px;color:var(--text-faint);line-height:1.6}

.tb-prog{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.tb-bar{flex:1 1 90px;min-width:70px;height:6px;border-radius:99px;background-color:var(--line);overflow:hidden}
.tb-bar i{display:block;height:100%;border-radius:99px;background-color:var(--primary)}
.tb-prog-txt{font-size:11.5px;color:var(--text-2);font-variant-numeric:tabular-nums}
.tb-prog-note{font-size:10.5px;color:var(--text-faint)}

.tb-rest{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.tb-rest-label{font-size:11px;color:var(--text-faint)}
.tb-todo{display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:99px;background-color:var(--yellow-soft);color:#a97b0c;font-size:10.5px;white-space:nowrap}
.tb-rest-none{font-size:11px;color:var(--text-faint)}

/* ---------- 任务矩阵 ---------- */
/* table-layout:fixed 必须配 colgroup 显式列宽，否则各列均分、任务名会被挤爆 */
table.mx{table-layout:fixed;width:100%}
.mx th,.mx td{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left;font-size:12px;vertical-align:middle}
.mx thead th{font-size:11px;color:var(--text-secondary);font-weight:500}
.mx-name{display:block;color:var(--text-main);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mx-acc{text-align:center}
.mx-nick{display:block;font-size:11.5px;color:var(--text-main);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mx-uid{display:block;font-size:10px;color:var(--text-faint);letter-spacing:-.2px}
.mx-cnt{text-align:center;color:var(--text-2);font-variant-numeric:tabular-nums}
.mx-cell{text-align:center}
/* 三态圆点：done=已完成（推断）/ todo=待完成 / unknown=本轮没跑完推不出 */
.mx-mark{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;font-size:12px;line-height:1}
.mx-mark.done{background-color:var(--primary-soft);color:var(--primary-text)}
.mx-mark.todo{background-color:var(--yellow-soft);color:#a97b0c}
.mx-mark.unknown{background-color:var(--bg-soft);color:var(--text-faint)}
.mx-reason{display:block;font-size:10px;color:var(--text-faint)}
.mx-infer{background-color:var(--blue-soft);color:#4a6fa8;margin-left:6px}
/* 固定第一行「今日签到」：实时状态行 —— 淡底 + 左侧主色条把它和"推断出来的成长任务"区分开，
   同时不参与 .mx-all 的淡出（它永远该被看见）。 */
.mx-pinned{background-color:var(--primary-soft-2)}
.mx-pinned .mx-name{font-weight:600;color:var(--primary-text)}
.mx-pinned .mx-cnt{color:var(--primary-text)}
.mx-pinned td{border-bottom:1px solid var(--primary-soft)}
.mx-live{background-color:var(--primary-soft);color:var(--primary-text);margin-left:6px}
/* 全账号都已完成的行淡出，视线先落在还有待办的行上 */
.mx-all{opacity:.6}

@media (max-width:1180px){
  .tb-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:760px){
  .tb-grid{grid-template-columns:1fr}
}

@media (max-width:640px){
  .acc-srcgrid{grid-template-columns:1fr}
  .acc-row{flex-wrap:wrap}
}

