/* 站群AI发文系统 - 后台样式（浅色简洁） */
:root{
  --bg:#f3f5f9; --card:#fff; --line:#e4e8ef; --txt:#24303f; --sub:#7a8699;
  --pri:#3b6ef6; --pri-d:#2f57cc; --ok:#18a058; --warn:#e6a23c; --bad:#e04848;
  --sidebar:#1e2a3b; --sidebar-a:#33445c;
  --shadow-sm:0 1px 3px rgba(16,24,40,.05); --shadow-md:0 6px 18px rgba(16,24,40,.08);
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:"Microsoft YaHei","PingFang SC","Segoe UI",sans-serif;background:var(--bg);color:var(--txt);font-size:14px}
a{color:var(--pri);text-decoration:none}
h1{font-size:20px;font-weight:600}
table{width:100%;border-collapse:collapse;background:#fff}
th,td{padding:9px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;font-size:13px}
th{background:#f7f9fc;color:#5b6779;font-weight:600;white-space:nowrap}
tr:hover td{background:#fafbfd}
/* 滚动条 */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#ccd5e3;border-radius:5px;border:2px solid #fff}
::-webkit-scrollbar-thumb:hover{background:#aeb9cc}
::-webkit-scrollbar-track{background:transparent}
/* 布局 */
.layout{display:flex;min-height:100vh}
.sidebar{width:200px;background:var(--sidebar);color:#c6d0e0;flex-shrink:0;display:flex;flex-direction:column}
.sidebar .logo{padding:20px 18px 16px;color:#fff;font-size:16px;font-weight:600;border-bottom:1px solid #2c3a50}
.sidebar .logo small{display:block;font-size:11px;color:#8b9bb4;font-weight:400;margin-top:2px}
.sidebar nav{flex:1;padding:10px 0}
.sidebar nav a{display:block;padding:11px 20px;color:#c6d0e0;font-size:14px;border-left:3px solid transparent;transition:background .15s,color .15s}
.sidebar nav a:hover{background:var(--sidebar-a);color:#fff}
.sidebar nav a.on{background:var(--sidebar-a);color:#fff;border-left-color:var(--pri);box-shadow:inset 0 0 24px rgba(59,110,246,.12)}
.sidebar .foot{padding:14px 20px;font-size:12px;color:#7787a0;border-top:1px solid #2c3a50}
.main{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar{height:54px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 24px;box-shadow:var(--shadow-sm);position:relative;z-index:10}
.topbar .user{color:var(--sub);font-size:13px;display:flex;gap:14px;align-items:center}
.content{padding:22px 24px;flex:1}
/* 组件 */
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:18px;margin-bottom:16px;box-shadow:var(--shadow-sm);transition:box-shadow .2s}
.card:hover{box-shadow:var(--shadow-md)}
.card h2{font-size:15px;font-weight:600;margin-bottom:14px}
.card .desc{color:var(--sub);font-size:12px;margin-bottom:12px}
.btn{display:inline-block;padding:7px 16px;border-radius:6px;border:1px solid var(--line);background:#fff;color:var(--txt);cursor:pointer;font-size:13px;transition:.16s;line-height:1.4}
.btn:hover{border-color:#c9d3e3;background:#f8fafd}
.btn:active{transform:translateY(1px)}
.btn-pri{background:var(--pri);border-color:var(--pri);color:#fff;box-shadow:0 2px 8px rgba(59,110,246,.28)}
.btn-pri:hover{background:var(--pri-d);border-color:var(--pri-d);color:#fff;box-shadow:0 4px 12px rgba(59,110,246,.35);transform:translateY(-1px)}
.btn-pri:active{transform:translateY(1px);box-shadow:0 1px 4px rgba(59,110,246,.3)}
.btn-danger{background:#fff;border-color:#f0b4b4;color:var(--bad)}
.btn-danger:hover{background:#fdecec;border-color:#e79a9a}
.btn-sm{padding:3px 10px;font-size:12px}
.btn[disabled]{opacity:.5;cursor:not-allowed;transform:none!important}
.form-row{margin-bottom:13px}
.form-row label{display:block;font-size:13px;color:#5b6779;margin-bottom:5px}
.form-row label .req{color:var(--bad);margin-left:2px}
input[type=text],input[type=password],input[type=url],input[type=number],input[type=time],select,textarea{
  width:100%;padding:8px 10px;border:1px solid #ccd5e3;border-radius:6px;font-size:13px;background:#fff;color:var(--txt);transition:border-color .15s,box-shadow .15s}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--pri);box-shadow:0 0 0 3px rgba(59,110,246,.13)}
textarea{min-height:90px;resize:vertical;font-family:inherit}
.inline-form{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end}
.inline-form .form-row{margin-bottom:0;min-width:140px}
.tag{display:inline-block;padding:1px 9px;border-radius:20px;font-size:12px}
.tag-ok{background:#e5f6ec;color:var(--ok)}
.tag-wait{background:#eef2f8;color:var(--sub)}
.tag-bad{background:#fdecec;color:var(--bad)}
.tag-warn{background:#fbf1e0;color:var(--warn)}
.grid{display:grid;gap:14px}
.grid-4{grid-template-columns:repeat(4,1fr)}
.grid-2{grid-template-columns:1fr 1fr}
@media(max-width:1000px){.grid-4{grid-template-columns:1fr 1fr}}
.stat{background:#fff;border:1px solid var(--line);border-radius:10px;padding:16px;box-shadow:var(--shadow-sm);transition:transform .18s,box-shadow .18s}
.stat:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.stat .num{font-size:26px;font-weight:700;margin:4px 0 2px}
.stat .lbl{color:var(--sub);font-size:12px}
.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.toolbar .grow{flex:1}
.pager{display:flex;gap:6px;align-items:center;margin-top:12px;font-size:13px;color:var(--sub)}
.pager a{padding:4px 10px;border:1px solid var(--line);border-radius:5px;background:#fff;transition:.15s}
.pager a:hover{border-color:var(--pri);color:var(--pri)}
.pager a.cur{background:var(--pri);color:#fff;border-color:var(--pri)}
/* 弹窗：毛玻璃遮罩 + 悬浮阴影 + 滑入动画（只能通过按钮关闭，防误触） */
.modal-mask{position:fixed;inset:0;background:rgba(15,23,42,.5);backdrop-filter:blur(3px);display:none;align-items:flex-start;justify-content:center;z-index:50;padding-top:6vh}
.modal-mask.show{display:flex;animation:maskIn .18s ease}
.modal{background:#fff;border-radius:12px;width:560px;max-width:94vw;max-height:84vh;overflow:auto;padding:22px;box-shadow:0 24px 64px rgba(10,20,40,.32);animation:modalIn .24s cubic-bezier(.2,.7,.3,1)}
.modal h3{font-size:16px;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--line);color:var(--txt)}
.modal .modal-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}
@keyframes maskIn{from{opacity:0}to{opacity:1}}
@keyframes modalIn{from{opacity:0;transform:translateY(-16px) scale(.97)}to{opacity:1;transform:none}}
.progress-bar{height:8px;background:#e8edf5;border-radius:6px;overflow:hidden;margin:10px 0}
.progress-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--pri),#6c94f9);transition:width .3s}
.log-line{font-size:12.5px;padding:3px 0;border-bottom:1px dashed #eef1f6;color:#5b6779;word-break:break-all}
.log-line b{font-weight:600}
.log-line .ok{color:var(--ok)} .log-line .bad{color:var(--bad)}
pre.raw{background:#f6f8fb;border:1px solid var(--line);padding:12px;border-radius:6px;font-size:12px;white-space:pre-wrap;word-break:break-all;max-height:400px;overflow:auto}
.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:8px}
.muted{color:var(--sub)}
.small{font-size:12px}
.mt8{margin-top:8px}.mt16{margin-top:16px}
.flex{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
/* 登录页 */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#16223c 0%,#2243a8 55%,#3b6ef6 100%)}
.login-box{background:#fff;border-radius:14px;padding:36px;width:380px;box-shadow:0 24px 70px rgba(6,16,36,.45);animation:modalIn .3s cubic-bezier(.2,.7,.3,1)}
.login-box h1{font-size:19px;text-align:center;margin-bottom:6px}
.login-box .sub{text-align:center;color:var(--sub);font-size:12.5px;margin-bottom:22px}
.login-box .btn-pri{width:100%;padding:10px;font-size:14px}
.login-err{background:#fdecec;color:var(--bad);border-radius:6px;padding:8px 12px;font-size:13px;margin-bottom:12px}
code{background:#eef2f8;padding:1px 6px;border-radius:4px;font-size:12px}

/* ===== 列表工具区（标题池/日志筛选通用） ===== */
.stat-strip{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.stat-chip{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:86px;padding:10px 16px;border-radius:10px;
  background:linear-gradient(160deg,#f7f9fd,#eef2f9);border:1px solid var(--line);transition:.15s}
.stat-chip:hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(30,42,59,.08)}
.stat-chip .num{font-size:22px;font-weight:700;line-height:1.2;color:var(--txt)}
.stat-chip .lbl{font-size:12px;color:var(--sub);margin-top:2px}
.stat-chip.c-wait{background:linear-gradient(160deg,#f0f4fb,#e7edf8)}
.stat-chip.c-wait .num{color:#5b7ecb}
.stat-chip.c-ok{background:linear-gradient(160deg,#e9f7ef,#dcf2e6)}
.stat-chip.c-ok .num{color:var(--ok)}
.stat-chip.c-bad{background:linear-gradient(160deg,#fdefef,#fbe4e4)}
.stat-chip.c-bad .num{color:var(--bad)}
.stat-chip.c-sub{background:linear-gradient(160deg,#f2f4f7,#e9ecef)}

.filter-bar{display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap;padding:14px 16px;margin-bottom:14px;
  background:#f8fafd;border:1px solid var(--line);border-radius:10px}
.filter-bar .f-item{display:flex;flex-direction:column;gap:5px;min-width:0}
.filter-bar .f-item>span{font-size:12px;color:#5b6779;font-weight:600;white-space:nowrap}
.filter-bar select,.filter-bar input[type=text]{min-width:130px;width:auto}
/* 横向单行筛选栏（标签与控件同行，按钮靠右） */
.filter-bar.fbar-row{align-items:center;gap:10px}
.filter-bar.fbar-row .f-item{flex-direction:row;align-items:center;gap:7px}
.filter-bar.fbar-row .f-item>span{font-size:13px;font-weight:600}
.filter-bar.fbar-row select,.filter-bar.fbar-row input[type=text]{min-width:0}
.action-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:10px 14px;margin-bottom:12px;
  background:#fff;border:1px dashed #d4dcea;border-radius:10px}
.action-bar .op-label{font-size:12px;font-weight:700;color:var(--sub);letter-spacing:1px;margin-right:2px}

/* ===== 日期选择与快捷范围 ===== */
.date-range{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid #ccd5e3;border-radius:8px;padding:3px 8px;transition:.15s}
.date-range:focus-within{border-color:var(--pri);box-shadow:0 0 0 3px rgba(59,110,246,.13)}
.date-sep{color:#9aa7bb;font-style:normal;font-size:12px}
input[type=date]{border:none;padding:6px 4px;font-size:13px;color:var(--txt);background:transparent;font-family:inherit;outline:none;cursor:pointer;min-width:118px}
input[type=date]:hover{background:#f2f6fc;border-radius:6px}
input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;opacity:.55;padding:2px;border-radius:4px;transition:.15s}
input[type=date]::-webkit-calendar-picker-indicator:hover{opacity:1;background:rgba(59,110,246,.12)}
.quick-ranges{display:inline-flex;gap:6px;flex-wrap:wrap}
.quick-ranges a{padding:6px 13px;border:1px solid var(--line);border-radius:99px;font-size:12px;color:#5b6779;background:#fff;transition:.15s;white-space:nowrap}
.quick-ranges a:hover{border-color:var(--pri);color:var(--pri);background:#f0f5ff;transform:translateY(-1px)}

/* ===== AI生成测试：过程控制台与结果 ===== */
.test-console{border:1px solid #202b3d;border-radius:10px;overflow:hidden;margin-top:10px;background:#1b2434;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
.test-console .tc-head{display:flex;align-items:center;gap:8px;padding:8px 14px;background:#141c2b;border-bottom:1px solid #232f45;
  color:#aeb9cf;font-size:12px;letter-spacing:.5px}
.test-console .tc-dot{width:9px;height:9px;border-radius:50%;background:#4ade80;box-shadow:0 0 6px #4ade80;animation:tcPulse 1.6s infinite}
@keyframes tcPulse{0%,100%{opacity:1}50%{opacity:.35}}
.test-console .tc-body{padding:10px 14px 12px;max-height:220px;overflow-y:auto;font-family:Consolas,Menlo,"Courier New",monospace;font-size:12.5px;line-height:1.85}
.test-console .tc-line{color:#8fa1c0;word-break:break-all;animation:tcIn .2s ease}
@keyframes tcIn{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}
.test-console .tc-line.info{color:#7db3ff}
.test-console .tc-line.wait{color:#d9b76a}
.test-console .tc-line.ok{color:#4ade80;font-weight:600}
.test-console .tc-line.fail{color:#ff7a7a;font-weight:600}
.test-console .tc-body::-webkit-scrollbar{width:6px}
.test-console .tc-body::-webkit-scrollbar-thumb{background:#31405c;border-radius:3px}
.test-result{display:flex;align-items:flex-start;gap:8px;padding:12px 16px;border-radius:10px;font-size:13.5px;font-weight:700;margin-bottom:10px;word-break:break-all;animation:tcIn .25s ease}
.test-result.ok{background:#e9f7ef;border:1px solid #bce5cc;color:#17754a}
.test-result.fail{background:#fdefef;border:1px solid #f2c2c2;color:#c53030;font-size:13px}

/* ===== v1.9：站点列表分组折叠（分类行 + 箭头 + 搜索框） ===== */
tbody.grp + tbody.grp tr.grp-row td{border-top:2px solid #e3e9f2}
tr.grp-row td{background:#f5f8fc;cursor:pointer;user-select:none;font-size:13.5px;padding:10px 12px}
tr.grp-row:hover td{background:#eaf1fb}
tr.grp-row td .tag{margin-left:6px;font-weight:400}
.grp-arrow{display:inline-block;width:16px;color:#5b7cb5;font-weight:700}
.grp-ops{float:right;font-weight:400}
.kw-box{min-width:200px;padding:6px 10px;border:1px solid #d6dde8;border-radius:6px;font-size:13px;outline:none;transition:border-color .15s}
.kw-box:focus{border-color:#4a7fd4}

/* ===== v1.9.1：站点下拉美化（.sel）+ 筛选栏按钮紧贴搜索框 ===== */
select.sel{
  -webkit-appearance:none;-moz-appearance:none;appearance:none;
  padding:8px 32px 8px 11px;font-size:13px;line-height:1.4;color:var(--txt);
  background-color:#fff;border:1px solid #ccd5e3;border-radius:8px;cursor:pointer;
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%236b7a90' stroke-width='1.8' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 11px center;background-size:11px 7px;
  transition:border-color .15s,box-shadow .15s,background-color .15s;
}
select.sel:hover{border-color:#9fb6dc;background-color:#fafcff}
select.sel:focus{border-color:var(--pri);box-shadow:0 0 0 3px rgba(59,110,246,.15);outline:none}
select.sel:disabled{background-color:#f4f6f9;color:#9aa7bb;cursor:not-allowed}
/* 下拉列表：分组标题行高亮；站点行靠文本前的两个全角空格体现层级（option 的 padding 各浏览器表现不一致，不可依赖） */
select.sel option{padding:7px 12px;font-size:13px;line-height:1.45;color:var(--txt);background:#fff;font-weight:400}
/* 可点的「整个分类」行（筛选类下拉） */
select.sel option.opt-group-pick{color:var(--pri);font-weight:700;background:#f0f5ff;
  border-bottom:1px dashed #c7d8f5}
/* 不可点的分组标题行（选目标站点的下拉） */
select.sel option.opt-grp-title{color:#7b8aa3;font-weight:700;background:#eef2f8;font-size:12.5px;
  border-top:1px solid #e1e7f0}
select.sel option:checked,select.sel option:hover{background:#e7efff;color:var(--pri)}
select.sel option.opt-grp-title:hover{background:#eef2f8;color:#7b8aa3}
/* 与 .sel 同高的输入框，筛选栏里视觉统一 */
.sel-inp{padding:8px 11px;font-size:13px;border:1px solid #ccd5e3;border-radius:8px;background:#fff;transition:.15s}
.sel-inp:hover{border-color:#9fb6dc;background-color:#fafcff}
.sel-inp:focus{border-color:var(--pri);box-shadow:0 0 0 3px rgba(59,110,246,.15);outline:none}
/* 筛选栏：按钮组紧跟最后一个筛选项，不再被推到最右 */
.filter-bar.fbar-row .f-item .f-pad{display:inline-block;width:0;overflow:hidden}
.filter-bar.fbar-row .f-item .btn{margin-left:0}

/* ===== v1.9.3：自定义站点下拉（支持分组折叠 + 搜索，60+ 站点也不怕） ===== */
/* 原生 select 只隐藏视觉，保留在 DOM，表单提交与无 JS 时照常工作 */
select.zs-src{position:absolute!important;width:1px!important;height:1px!important;opacity:0!important;
  padding:0!important;border:0!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;pointer-events:none}
.zs-wrap{position:relative;display:inline-block;min-width:210px;vertical-align:middle;text-align:left}
.zs-btn{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:8px 30px 8px 11px;position:relative;font-family:inherit;font-size:13px;line-height:1.4;color:var(--txt);
  background:#fff;border:1px solid #ccd5e3;border-radius:8px;cursor:pointer;transition:.15s;text-align:left}
.zs-btn:hover{border-color:#9fb6dc;background:#fafcff}
.zs-wrap.on .zs-btn{border-color:var(--pri);box-shadow:0 0 0 3px rgba(59,110,246,.15)}
.zs-btn .zs-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.zs-btn .zs-caret{position:absolute;right:11px;top:50%;margin-top:-2px;
  border-left:4.5px solid transparent;border-right:4.5px solid transparent;border-top:5.5px solid #6b7a90;transition:transform .15s}
.zs-wrap.on .zs-btn .zs-caret{transform:rotate(180deg)}
/* 面板挂在 <body> 下（留在 .modal 里会被它的 overflow:auto 裁掉），坐标由 JS 手算 */
.zs-panel{display:none;position:fixed;left:0;top:0;width:280px;min-width:280px;
  background:#fff;border:1px solid #d9e0ec;border-radius:10px;box-shadow:0 12px 32px rgba(16,24,40,.16);z-index:200;overflow:hidden}
.zs-panel.on{display:block}
.zs-search{display:flex;align-items:center;gap:6px;padding:8px;border-bottom:1px solid var(--line);background:#fbfcfe}
.zs-search input{flex:1;min-width:0;padding:7px 10px;font-family:inherit;font-size:13px;color:var(--txt);
  border:1px solid #ccd5e3;border-radius:7px;outline:none;transition:.15s}
.zs-expall{flex-shrink:0;padding:6px 9px;font-family:inherit;font-size:12px;color:var(--pri);white-space:nowrap;
  background:#eaf1ff;border:1px solid #c9dbff;border-radius:7px;cursor:pointer;transition:.15s}
.zs-expall:hover{background:#dbe7ff;border-color:#a9c4ff}
.zs-search input:focus{border-color:var(--pri);box-shadow:0 0 0 3px rgba(59,110,246,.13)}
.zs-list{max-height:330px;overflow-y:auto;padding:4px}
.zs-row{display:flex;align-items:center;gap:7px;padding:8px 10px;font-size:13px;line-height:1.45;
  color:var(--txt);border-radius:6px;cursor:pointer;white-space:nowrap;overflow:hidden}
.zs-row:hover{background:#eef3fb}
.zs-row[data-cur="1"]{background:#e7efff;color:var(--pri);font-weight:600}
.zs-row[data-disabled="1"]{color:#a8b3c5;cursor:default}
.zs-row[data-disabled="1"]:hover{background:transparent}
.zs-lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.zs-cnt{flex-shrink:0;font-size:11.5px;font-weight:400;color:#8a97ad}
.zs-pick{flex-shrink:0;padding:1px 9px;font-family:inherit;font-size:11.5px;font-weight:400;line-height:1.75;
  color:var(--pri);background:#fff;border:1px solid #c9dbff;border-radius:20px;cursor:pointer;transition:.15s}
.zs-pick:hover{background:var(--pri);border-color:var(--pri);color:#fff}
.zs-grp{color:#33548c;font-weight:700;background:#f5f8fc;margin-top:3px}
.zs-grp.is-title{color:#7b8aa3;background:#eef2f8;font-weight:700;font-size:12.5px}
.zs-grp .zs-caret{border-left:5px solid #5b7cb5;border-top:4px solid transparent;border-bottom:4px solid transparent;
  position:static;margin:0;flex-shrink:0;transition:transform .15s}
.zs-grp .zs-caret.open{transform:rotate(90deg)}
.zs-site{padding-left:28px}
.zs-empty{padding:20px 10px;text-align:center;color:var(--sub);font-size:13px}
