/* ==========================================================
   页面样式
   ========================================================== */

/* ---------- 通用：页签行 / 右栏小件 ---------- */
.tabs-row{display:flex;align-items:flex-end;gap:12px;margin-top:22px;border-bottom:1px solid var(--line)}
.tabs-row .tabs{flex:1;min-width:0;border-bottom:0}
.tabs-row > .btn,.tabs-row > .seg,.tabs-row > .row-tools{margin-bottom:7px}
.row-tools{display:flex;gap:8px;align-items:center}
.list-cap{display:flex;align-items:baseline;gap:8px;margin:30px 0 10px;font-family:var(--f-serif);font-size:17px;font-weight:700}
.list-cap .faint{font-family:var(--f-sans);font-size:13px;font-weight:400}

.rail-title{display:flex;align-items:center;gap:8px}
.rail-title .r{margin-left:auto;font-size:12px;color:var(--muted)}
.rail-line{margin-top:10px;font-size:13px;color:var(--muted);line-height:1.6}
.rail-line b{color:var(--ink);font-weight:500}
.rail-cta{margin-top:auto;flex:none}
.score{display:flex;align-items:baseline;justify-content:space-between;margin-top:14px}
.score small{font-size:12px;color:var(--muted)}
.score b{font-family:var(--f-serif);font-size:26px;font-weight:700;margin:0 4px}
.score-bar{display:flex;gap:2px;height:6px;margin-top:6px}
.score-bar i{display:block;min-width:4px;transition:flex-grow .6s var(--ease)}
.score-bar .a{background:var(--ta);border-radius:3px 0 0 3px}
.score-bar .b{background:var(--tb);border-radius:0 3px 3px 0}
.duty li{display:flex;align-items:center;gap:10px;height:40px}
.duty li b{font-weight:500}
.duty li .r{margin-left:auto;font-size:12px;text-align:right}
.duty .avatar.sm{background:var(--sunk)}

.float-pill{display:none}
@media (max-width:900px){
  .float-pill{
    position:fixed;z-index:40;left:50%;bottom:calc(18px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);
    display:inline-flex;align-items:center;gap:6px;height:46px;padding:0 22px;border-radius:23px;
    background:var(--ink);color:var(--surface);text-decoration:none;font-weight:500;box-shadow:var(--shadow-float);
    animation:pillIn .4s var(--ease) .25s both;
  }
  .float-pill b{font-weight:700}
  .rail .rail-cta{display:none}
}
@keyframes pillIn{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}

/* ---------- 处置台 ---------- */
.inc-list{margin-top:18px}
.inc{padding:18px 20px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card)}
.inc + .inc{margin-top:12px}
.inc-list:not(.no-anim) .inc{animation:enterUp .36s var(--ease) both}
.inc-list:not(.no-anim) .inc:nth-child(2){animation-delay:.04s}
.inc-list:not(.no-anim) .inc:nth-child(3){animation-delay:.08s}
.inc-list:not(.no-anim) .inc:nth-child(n+4){animation-delay:.12s}
.inc-top{display:flex;align-items:center;gap:10px;min-width:0}
.inc-top h2{font-family:var(--f-serif);font-size:18px;font-weight:700;min-width:0}
.inc-meta{margin-left:auto;font-size:12px;color:var(--muted);white-space:nowrap}
.inc p{margin:8px 0 12px;line-height:1.7}
.inc p.inc-note{margin:10px 0 0;font-size:13px;color:var(--muted)}
.inc b{font-weight:500}
.inc-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
.inc-quiet{margin-left:auto}
.tag.lvl{min-width:24px;justify-content:center;font-weight:700}
.pname{border:0;background:none;padding:0;font-weight:500;color:inherit;text-decoration:underline;text-decoration-color:transparent;text-underline-offset:3px;transition:text-decoration-color .15s}
.pname.ta{color:var(--ta)}.pname.tb{color:var(--tb)}
.pname:hover{text-decoration-color:currentColor}

/* 击倒时间点 */
.tl{position:relative;height:50px;margin:4px 2px 0}
.tl-axis{position:absolute;left:0;right:0;top:30px;height:2px;border-radius:1px;background:var(--line)}
.tl-tick{position:absolute;top:14px;width:4px;height:16px;margin-left:-2px;border-radius:1px;background:var(--ink);transform-origin:bottom;animation:tickUp .45s var(--ease) both}
.tl-tick.hot{top:8px;height:22px;background:var(--high)}
.tl-note{position:absolute;top:-8px;transform:translateX(-50%);font-size:11px;color:var(--high);white-space:nowrap}
.tl-lab{position:absolute;top:36px;font-size:11px;color:var(--muted);white-space:nowrap}
.tl-lab.end{transform:translateX(-100%)}
@keyframes tickUp{from{transform:scaleY(0);opacity:0}to{transform:none;opacity:1}}

/* 同 IP 连线 */
.dual{display:flex;align-items:center;margin:14px 0 4px;min-width:0}
.dual-who{flex:none;max-width:40%;padding:6px 12px;border:0;border-radius:6px;background:var(--bg);font-weight:500;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:background-color .15s}
.dual-who:hover{background:var(--sunk)}
.dual-who.ta{color:var(--ta)}.dual-who.tb{color:var(--tb)}
.dual-who small{margin-left:6px;font-size:12px;font-weight:400;color:var(--muted)}
.dual-line{flex:1;max-width:160px;min-width:16px;border-top:2px dashed var(--mid)}
.dual-ip{flex:none;padding:0 10px;font-size:12px;color:var(--mid)}

/* 飞天进度 */
.fbar{display:flex;height:10px;border-radius:5px;overflow:hidden;background:var(--sunk)}
.fbar-on{background:var(--accent);animation:growX .7s var(--ease) .15s both;transform-origin:left}
.fbar-stale{background:repeating-linear-gradient(135deg,var(--mid) 0 4px,transparent 4px 8px);opacity:.7}
.fbar-lab{display:flex;justify-content:space-between;margin-top:6px;font-size:11px;color:var(--muted)}
@keyframes growX{from{transform:scaleX(0)}to{transform:none}}

.inc-split{display:flex;align-items:center;gap:20px;margin-top:8px}
.inc-split p{margin:0;flex:1}
.inc-split .spark{flex:none}

.quotes{margin:-2px 0 0;padding-left:12px;border-left:2px solid var(--line)}
.quotes li{font-size:13px;line-height:1.7;color:var(--ink-2)}
.quotes li .faint{margin-right:8px}
.said{margin:0;padding:10px 14px;border-radius:8px;background:var(--bg);line-height:1.7}
.said mark{background:var(--high-bg);color:var(--high);padding:0 3px;border-radius:3px;font-weight:500}

.inc-empty{border:1px dashed var(--line-2);border-radius:var(--r-card);padding:56px 24px}

.done-list{padding:4px 0}
.done-row{display:flex;align-items:center;gap:12px;min-height:58px;padding:8px 16px 8px 20px}
.done-row + .done-row{border-top:1px solid var(--line)}
.done-t{flex:1;min-width:0;line-height:1.4}
.done-t b{display:block;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.done-t small,.done-r small{font-size:12px;color:var(--faint)}
.done-r{text-align:right;font-size:13px;color:var(--muted);line-height:1.4}
.done-r small{display:block}
.done-row .btn{opacity:0;transition:opacity .15s}
.done-row:hover .btn,.done-row .btn:focus-visible{opacity:1}
@media (hover:none){.done-row .btn{opacity:1}}

/* ---------- 玩家抽屉 ---------- */
.pl-avatar{width:44px;height:44px;font-size:18px;font-family:var(--f-serif);background:var(--sunk);color:var(--ink)}
.pl-avatar.ta{background:var(--ta-bg);color:var(--ta)}
.pl-avatar.tb{background:var(--tb-bg);color:var(--tb)}
.pl-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--line);border-radius:8px}
.pl-stats > div{padding:10px 12px;display:flex;flex-direction:column}
.pl-stats > div + div{border-left:1px solid var(--line)}
.pl-stats span{font-size:12px;color:var(--muted)}
.pl-stats b{font-size:22px;font-weight:500;line-height:1.3}
.marks{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.mark-add{display:flex;gap:6px;flex:1;min-width:180px}
.mark-add .input{height:28px;font-size:13px}
.chat-lines li{display:flex;gap:10px;font-size:13px;line-height:1.6;padding:3px 0}
.chat-lines .ch{flex:none;color:var(--muted);min-width:3em}
.hist{display:flex;flex-direction:column}
.hist-item{display:flex;align-items:flex-start;gap:10px;padding:9px 0}
.hist-item + .hist-item{border-top:1px solid var(--line)}
.hist-item .tag{margin-top:1px}
.hist-text{flex:1;min-width:0;font-size:13px;line-height:1.55}
.hist-text b{font-weight:500}
.hist-text small{display:block;font-size:12px;color:var(--faint)}

/* ---------- 登录 ---------- */
.login{min-height:100%;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);background:var(--bg)}
.login-side{display:flex;flex-direction:column;padding:40px 56px;border-right:1px solid var(--line)}
.login-side .brand{padding:0}
.login-say{margin:auto 0;max-width:460px;animation:enterUp .5s var(--ease) both}
.login-say h1{font-family:var(--f-serif);font-size:44px;font-weight:700;line-height:1.3;letter-spacing:.01em}
.login-say p{margin-top:18px;color:var(--muted);line-height:1.8}
.login-foot{font-size:12px}
.login-main{display:grid;place-items:center;padding:40px 24px;background:var(--surface)}
.login-card{width:min(380px,100%);animation:enterUp .5s var(--ease) .06s both}
.login-card h2{font-family:var(--f-serif);font-size:26px;font-weight:700}
.login-card > p{margin-top:6px;font-size:13px}
.input.lg{height:44px;font-size:15px;border-radius:8px}
.pw{position:relative}
.pw .input{padding-right:44px}
.pw .btn{position:absolute;right:8px;top:8px}
.pw .btn.on{color:var(--accent)}
.login-err{min-height:20px;margin:-4px 0 -6px;font-size:13px;color:var(--high)}
.login-switch{margin-top:22px;font-size:13px;text-align:center}
.login-switch .linkish{margin-left:4px}
.shake{animation:shake .36s var(--ease)}
@keyframes shake{0%,100%{transform:none}25%{transform:translateX(-5px)}75%{transform:translateX(4px)}}
@media (max-width:900px){
  .login{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr}
  .login-side{padding:calc(24px + env(safe-area-inset-top,0px)) 22px 8px;border-right:0}
  .login-say{margin:34px 0 10px}
  .login-say h1{font-size:30px}
  .login-say p{margin-top:10px;font-size:13px}
  .login-foot{display:none}
  .login-main{place-items:start center;padding:26px 22px 40px;border-top:1px solid var(--line)}
}

/* ---------- 在线玩家 ---------- */
.ol-tools{margin-top:22px}
.ol-tools .chip span{color:var(--faint);margin-left:2px}
.ol-tools .chip[aria-pressed="true"] span{color:inherit;opacity:.7}
.teams{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:18px;align-items:start}
.teams:not(.no-anim) > .team{animation:enterUp .36s var(--ease) both}
.teams:not(.no-anim) > .team + .team{animation-delay:.05s}
.team{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);overflow:hidden}
.team-head{display:flex;align-items:baseline;gap:14px;padding:14px 16px 12px;border-bottom:1px solid var(--line);position:relative}
.team-head::before{content:"";position:absolute;left:0;right:0;top:0;height:3px}
.team.side-a .team-head::before{background:var(--ta)}
.team.side-b .team-head::before{background:var(--tb)}
.team-head h2{flex:1;min-width:0;font-family:var(--f-serif);font-size:19px;font-weight:700}
.team.side-a .team-head h2{color:var(--ta)}
.team.side-b .team-head h2{color:var(--tb)}
.team-head h2 small{margin-left:8px;font-family:var(--f-sans);font-size:12px;font-weight:400;color:var(--muted)}
.team-n{font-size:12px;color:var(--muted);white-space:nowrap}
.team-n b{font-size:15px;font-weight:500;color:var(--ink);margin-right:2px}

.squad + .squad{border-top:1px solid var(--line)}
.squad-head{display:flex;align-items:center;gap:8px;height:40px;padding:0 8px 0 16px;background:color-mix(in srgb,var(--sunk) 60%,var(--surface))}
.squad-head > b{flex:none;min-width:22px;height:22px;padding:0 6px;border-radius:4px;background:var(--surface);border:1px solid var(--line);font-size:12px;font-weight:700;display:grid;place-items:center}
.squad-name{font-weight:500;min-width:0}
.squad-lock svg{width:13px;height:13px}
.squad-kind{font-size:12px}
.squad-n{margin-left:auto;font-size:12px;color:var(--muted);white-space:nowrap}
.squad-head .btn.icon{margin-left:2px}
.squad.unassigned .squad-head{background:color-mix(in srgb,var(--mid-bg) 55%,var(--surface))}
.squad.unassigned .squad-name{color:var(--mid)}
.pl-list{padding:2px 0}
.pl-row{position:relative;display:flex;align-items:center;gap:8px;height:36px;padding:0 8px 0 16px;cursor:pointer;transition:background-color .12s}
.pl-row:hover{background:var(--sunk)}
.pl-role{flex:none;width:5.6em;font-size:12px;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pl-name{min-width:0;flex:0 1 auto;border:0;background:none;padding:0;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-row.lead .pl-name{font-weight:700}
.pl-row .tag{height:20px;padding:0 5px;font-size:11px;flex:none}
.pl-sq{font-size:12px;white-space:nowrap}
.pl-kd{margin-left:auto;display:flex;align-items:baseline;gap:3px;font-size:13px;color:var(--muted);white-space:nowrap}
.pl-kd b{font-weight:500;color:var(--ink)}
.pl-kd i{font-style:normal;color:var(--faint);font-size:11px}
.pl-kd .bump{animation:bump 1.2s var(--ease)}
@keyframes bump{0%{color:var(--accent)}100%{color:inherit}}
.pl-acts{display:flex;gap:0;width:0;overflow:hidden;opacity:0;transition:opacity .15s}
.pl-row:hover .pl-acts,.pl-row:focus-within .pl-acts{width:auto;opacity:1}
.pl-acts .btn.icon.sm{width:26px;height:26px}
.pl-acts .btn svg{width:14px;height:14px}
.pl-list.flat .pl-row{height:34px}
@media (hover:none){.pl-acts{width:auto;opacity:1}.pl-acts [data-act="warn"],.pl-acts [data-act="kick"]{display:none}}

.map-name{font-family:var(--f-serif);font-size:26px;font-weight:700;line-height:1.25;margin-top:-2px}
.next-map{display:flex;align-items:center;gap:10px;margin-top:16px;padding:10px 12px;border-radius:8px;background:var(--sunk);font-size:13px}
.next-map b{font-weight:500;flex:1;min-width:0}
.btn-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:12px}
.btn-grid .btn{justify-content:flex-start}
.btn-grid .btn svg{color:var(--muted)}
.bc-tpl{margin-top:8px}
.bc-tpl .chip{height:26px}
.bc-foot{display:flex;align-items:center;justify-content:space-between;margin-top:10px;font-size:12px}
.bc-list{margin-top:14px}
.bc-list li{padding:8px 0;font-size:13px;line-height:1.55}
.bc-list li + li{border-top:1px solid var(--line)}
.bc-list small{display:block;color:var(--faint);font-size:12px}
.feat .toggle-row{min-height:42px}
.feat .toggle-row + .toggle-row{border-top:1px solid var(--line)}
.stepper{display:flex;gap:6px;align-items:center}
.stepper .input{width:72px;text-align:center;-moz-appearance:textfield}
.stepper .input::-webkit-outer-spin-button,.stepper .input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.stepper [data-max-save]{margin-left:auto}

@media (max-width:1360px){.teams{gap:12px}.pl-role{width:4.8em}}
@media (max-width:760px){
  .teams{grid-template-columns:minmax(0,1fr)}
  .ol-tools .input-ic{width:100%}
  .ol-tools .grow{display:none}
}

/* ---------- 服务器状态 ---------- */
[data-body] > * + *{margin-top:14px}
[data-body] > .list-cap{margin-top:30px}
[data-body]:not(.no-anim) > .card{animation:enterUp .36s var(--ease) both}
[data-body]:not(.no-anim) > .card:nth-child(2){animation-delay:.05s}
[data-body]:not(.no-anim) > .card:nth-child(3){animation-delay:.1s}
.st-chart .card-pad{padding:14px 18px 10px}
.st-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}
.st-strip > div{padding:14px 18px;display:flex;flex-direction:column;gap:2px}
.st-strip > div + div{border-left:1px solid var(--line)}
.st-strip span{font-size:12px;color:var(--muted)}
.st-strip b{font-size:22px;font-weight:500;line-height:1.3}
.st-strip b small{font-size:13px;color:var(--muted);font-weight:400}
.res{display:flex;flex-direction:column;gap:14px}
.res > div{display:grid;grid-template-columns:1fr auto;gap:6px 10px;align-items:baseline}
.res span{font-size:13px;color:var(--muted)}
.res b{font-weight:500;font-size:13px}
.res .meter{grid-column:1/-1}
.note-box{padding:14px 16px!important;border-radius:8px;border-top:0!important}
.note-box.mid{background:var(--mid-bg)}
.note-box.high{background:var(--high-bg)}
.note-box b{font-weight:700}
.note-box.mid b{color:var(--mid)}.note-box.high b{color:var(--high)}
.note-box p{margin:4px 0 10px;font-size:13px;line-height:1.6;color:var(--ink-2)}
.rail > .note-box + section,.rail > section + .note-box{margin-top:0}
@media (max-width:760px){
  .st-strip{grid-template-columns:repeat(2,minmax(0,1fr))}
  .st-strip > div:nth-child(3){border-left:0}
  .st-strip > div:nth-child(n+3){border-top:1px solid var(--line)}
}

/* 状态分析（对齐完整版 server_status）：6 项指标、并排卡片、构成条、排行横条、热力图 */
.st-strip.six{grid-template-columns:repeat(6,minmax(0,1fr))}
.st-strip small.sub{display:block;font-size:11.5px;color:var(--faint);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.st-grid{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);gap:14px}
.st-grid.half{grid-template-columns:repeat(2,minmax(0,1fr))}
.st-grid > .card{margin:0;min-width:0}
.st-legend-h{display:inline-flex;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.st-legend-h i{display:inline-block;width:10px;height:3px;border-radius:2px;margin-right:5px;vertical-align:middle}
.st-stack{display:flex;gap:2px;height:12px;border-radius:6px;overflow:hidden;background:var(--sunk)}
.st-stack i{display:block;min-width:3px}
.st-legend{list-style:none;margin:14px 0 0;padding:0;display:grid;gap:8px}
.st-legend li{display:grid;grid-template-columns:10px minmax(0,1fr) auto 52px;gap:8px;align-items:center;font-size:13px}
.st-legend li i{width:10px;height:10px;border-radius:3px}
.st-legend b{font-weight:500}
.st-legend small{text-align:right}
.st-hbar{list-style:none;margin:0;padding:0;display:grid;gap:11px}
.st-hbar li{display:grid;grid-template-columns:minmax(0,132px) minmax(0,1fr) 52px;gap:10px;align-items:center;font-size:13px}
.st-hbar b{text-align:right;font-weight:500}
.st-track{height:8px;border-radius:4px;background:var(--sunk);overflow:hidden}
.st-track i{display:block;height:100%;border-radius:4px}
.st-hm{display:grid;grid-template-columns:34px repeat(24,minmax(0,1fr));gap:3px;align-items:center}
.st-hm span{font-size:11px;color:var(--faint);white-space:nowrap}
.st-hm span.h{text-align:center;font-size:10px}
.st-hm i{display:block;height:20px;border-radius:3px;background:var(--accent)}
.st-hm i.now{outline:2px solid var(--ink);outline-offset:1px}
.st-hours{display:flex;justify-content:space-between;font-size:11px;color:var(--faint);margin-top:6px}
.st-src-list{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:7px;font-size:13px}
.st-src-list li{display:flex;align-items:center;gap:8px}
.st-src-list .r{margin-left:auto;font-size:12px}
@media (max-width:1180px){
  .st-strip.six{grid-template-columns:repeat(3,minmax(0,1fr))}
  .st-strip.six > div:nth-child(4){border-left:0}
  .st-strip.six > div:nth-child(n+4){border-top:1px solid var(--line)}
  .st-grid{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:760px){
  .st-grid.half{grid-template-columns:minmax(0,1fr)}
  .st-strip.six{grid-template-columns:repeat(2,minmax(0,1fr))}
  .st-strip.six > div:nth-child(4){border-left:1px solid var(--line)}
  .st-strip.six > div:nth-child(5){border-left:0}
  .st-hm{gap:2px;grid-template-columns:28px repeat(24,minmax(0,1fr))}
  .st-hm i{height:14px}
}

/* ---------- 玩家档案 / 封禁 ---------- */
.sort-by{display:flex;align-items:center;gap:8px;font-size:13px}
.sort-by .select{width:auto;height:32px}
.tag-row{display:inline-flex;flex-wrap:wrap;gap:4px}
.tbl .stack-cell{line-height:1.4}
.tbl .stack-cell > span,.tbl .stack-cell > small{display:block}
.tbl .stack-cell small,.ban-reason small{font-size:12px;color:var(--faint)}
.ban-reason{max-width:280px;line-height:1.4}
.ban-reason small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tbl .pname{text-align:left}
.tabs .n.hot{color:var(--high)!important;font-weight:700}
.req-list{display:flex;flex-direction:column;gap:12px}
.req{padding:16px 20px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);animation:enterUp .34s var(--ease) both}
.req-top{display:flex;align-items:center;gap:10px}
.req-top p{flex:1;min-width:0;font-size:15px}
.req-top p b{font-weight:500}
.req-top .faint{font-size:12px;white-space:nowrap}
.req-body{margin:12px 0 0 38px;padding:10px 14px;border-radius:8px;background:var(--bg);font-size:13px;line-height:1.7}
.req-body .muted{display:inline-block;width:3em;margin-right:8px}
.req-acts{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 0 38px}
.hbars{display:flex;flex-direction:column;gap:2px}
.hbar{display:grid;grid-template-columns:6.5em minmax(0,1fr) 2.2em;align-items:center;gap:10px;width:100%;height:30px;padding:0 6px;margin:0 -6px;border:0;border-radius:6px;background:none;text-align:left;font-size:13px;box-sizing:content-box}
.hbar:hover{background:var(--sunk)}
.hbar-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hbar-t{height:6px;border-radius:3px;background:var(--sunk);overflow:hidden}
.hbar-t i{display:block;height:100%;border-radius:3px;background:var(--ink);opacity:.72;animation:growX .6s var(--ease) both;transform-origin:left}
.hbar b{text-align:right;font-weight:500}
@media (max-width:760px){.hide-sm{display:none}.req-body,.req-acts{margin-left:0}}

/* ---------- 日志 ---------- */
.act-card{margin-top:14px;padding:12px 18px 14px}
.act-top{display:flex;justify-content:space-between;font-size:12px;margin-bottom:8px}
.log-card{overflow:hidden}
.log{padding:4px 0;transition:opacity .15s}
.log > li{display:flex;align-items:center;gap:12px;min-height:42px;padding:6px 18px;font-size:13.5px;line-height:1.55}
.log > li + li{border-top:1px solid var(--line)}
.log > li:hover{background:color-mix(in srgb,var(--sunk) 70%,transparent)}
.log-t{flex:none;width:5.2em;font-size:12.5px;color:var(--faint)}
.log.log-op .log-t,.log.log-login .log-t{width:6.6em}
.log-who{flex:none;width:3.6em;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.log-ch{flex:none;min-width:3.4em;justify-content:center}
.log-b{flex:1;min-width:0}
.log-b b{font-weight:500}
.log-b .pname{font-weight:500}
.log-r{flex:none;font-size:12px;color:var(--muted);white-space:nowrap}
.log mark{background:var(--high-bg);color:var(--high);padding:0 3px;border-radius:3px}
.log > li.is-tk{background:color-mix(in srgb,var(--high-bg) 45%,transparent)}
.log > li.is-hit{background:color-mix(in srgb,var(--high-bg) 35%,transparent)}
.log > li.is-stale{background:color-mix(in srgb,var(--mid-bg) 50%,transparent)}
.log > li.row-in{animation:rowIn 1.2s var(--ease) both}
.log-empty{display:block!important}
.log-empty:hover{background:none!important}
@media (max-width:760px){
  .log > li{flex-wrap:wrap;gap:4px 10px;padding:8px 14px}
  .log-b{flex-basis:100%;order:5}
  .log-t{width:auto}
}

/* ---------- 通用小件（后四页共用） ---------- */
.chip-n{margin-left:5px;color:var(--faint);font-variant-numeric:tabular-nums}
.chip[aria-pressed="true"] .chip-n{color:inherit;opacity:.65}
.chip-check{display:inline-flex;align-items:center;gap:6px;cursor:pointer;user-select:none}
.chip-check input{margin:0;accent-color:var(--accent)}
.chip-check:has(input:checked){border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
.tbl tr.is-dim td{color:var(--faint)}
.tbl tr.is-dim .who b,.tbl tr.is-dim .tag{opacity:.62}
.input-suffix{position:relative;display:flex;align-items:center;max-width:220px}
.input-suffix .input{padding-right:48px}
.input-suffix span{position:absolute;right:12px;font-size:13px;color:var(--muted);pointer-events:none}
.pick-list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.pick{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;cursor:pointer;transition:background-color .15s}
.pick + .pick{border-top:1px solid var(--line)}
.pick:hover{background:var(--sunk)}
.pick:has(input:checked){background:var(--accent-soft)}
.pick input{margin:3px 0 0;accent-color:var(--accent);flex:none}
.pick span{min-width:0;line-height:1.45}
.pick b{display:block;font-weight:500}
.pick small{display:block;font-size:12px;color:var(--muted)}
.copy.code{font-variant-numeric:tabular-nums;letter-spacing:.02em;font-weight:500}
.cdk-note{display:block;font-size:12px;margin-top:1px}
.code-list{margin:0;padding:12px 14px;border-radius:8px;background:var(--sunk);font-size:14px;line-height:1.9;letter-spacing:.03em;max-height:280px;overflow:auto;user-select:all}
.linkish.r{margin-left:auto}
.btn.danger-text{color:var(--high)}
.btn.danger-text:hover{background:var(--high-bg)}

/* ---------- 游戏管理员 ---------- */
.grp-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:16px;align-items:start}
.grp{animation:enterUp .34s var(--ease) both}
.grp:nth-child(2){animation-delay:.04s}.grp:nth-child(3){animation-delay:.08s}.grp:nth-child(4){animation-delay:.12s}
.perm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:2px 10px;padding:12px 16px 16px}
.drawer .perm-grid{padding:0}
.perm{display:flex;align-items:flex-start;gap:8px;padding:6px 0;cursor:pointer;font-size:13px;line-height:1.4}
.perm input{margin:2px 0 0;flex:none;accent-color:var(--accent)}
.perm small{display:block;font-size:11px;color:var(--faint)}
.perm:has(input:not(:checked)) span{color:var(--muted)}
.pkg-strip{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px;margin-top:16px}
.pkg{padding:12px 14px;border:1px solid var(--line);border-radius:8px;background:var(--surface);line-height:1.45}
.pkg b{display:block;font-weight:500}
.pkg span{font-size:12px;color:var(--muted)}
.duty-who{display:flex;align-items:center;gap:10px}
.duty-who b{font-weight:500}
.duty-bar{display:flex;flex-direction:column;gap:5px;min-width:140px;max-width:260px}
.duty-bar span{font-size:13px}
.mini-bars{display:block}
@media (max-width:1140px){.grp-grid{grid-template-columns:minmax(0,1fr)}}

/* ---------- 插件 ---------- */
.plug-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:22px}
.plug-grid:not(.no-anim) .plug{animation:enterUp .36s var(--ease) both}
.plug-grid:not(.no-anim) .plug:nth-child(2){animation-delay:.04s}
.plug-grid:not(.no-anim) .plug:nth-child(3){animation-delay:.08s}
.plug-grid:not(.no-anim) .plug:nth-child(n+4){animation-delay:.12s}
.plug{display:flex;flex-direction:column;padding:18px 20px 14px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);transition:border-color .2s}
.plug-top{display:flex;align-items:center;gap:10px}
.plug-top h2{font-family:var(--f-serif);font-size:18px;font-weight:700}
.plug-ver{font-size:12px;color:var(--faint)}
.plug-top .switch{margin-left:auto}
.plug-desc{margin-top:6px;font-size:13px;color:var(--muted);line-height:1.65}
.plug-cfg{display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px 14px;margin:14px 0 0;padding:12px 14px;border-radius:8px;background:var(--sunk);font-size:13px}
.plug-cfg dt{color:var(--muted)}
.plug-cfg dd{margin:0}
.plug-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:auto;padding-top:14px}
.plug-state{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--muted)}
.plug.off{border-style:dashed}
.plug.off .plug-top h2,.plug.off .plug-cfg{opacity:.62}
.pf-body{padding-top:20px!important}
.pf-switch{padding:4px 0}
.pf-preview{padding:9px 12px;border-radius:8px;background:var(--sunk);font-size:13px;line-height:1.6}
.pf-preview:empty{display:none}
@media (max-width:1140px){.plug-grid{grid-template-columns:minmax(0,1fr)}}

/* ---------- 反馈 ---------- */
.fb{flex:1;min-height:420px;display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr);margin-top:22px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);overflow:hidden}
.fb-list{display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--line)}
.fb-tabs{flex:none;padding:0 14px;border-bottom:1px solid var(--line)}
.fb-tabs .tabs{border-bottom:0;gap:18px}
.fb-items{flex:1;min-height:0;overflow-y:auto;padding:6px}
.fb-item{display:flex;flex-direction:column;gap:4px;width:100%;padding:11px 12px;border:0;border-radius:8px;background:none;text-align:left;transition:background-color .15s}
.fb-item:hover{background:var(--sunk)}
.fb-item[aria-current="true"]{background:var(--accent-soft)}
.fb-items li + li .fb-item{margin-top:2px}
.fb-item-top{display:flex;align-items:center;gap:8px;min-width:0}
.fb-item-top b{font-weight:500;min-width:0}
.fb-item-snip{font-size:13px;color:var(--muted)}
.fb-item-meta{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--faint)}
.fb-item-meta .tag{margin-left:auto;height:20px}
.fb-thread{display:flex;flex-direction:column;min-width:0;min-height:0}
.fb-pad{padding:24px}
.fb-none{margin:auto}
.fb-head{flex:none;display:flex;align-items:flex-start;gap:12px;padding:18px 22px 14px;border-bottom:1px solid var(--line)}
.fb-back{display:none;margin:-4px 0 0 -8px}
.fb-head-t{flex:1;min-width:0}
.fb-head-t h2{font-family:var(--f-serif);font-size:20px;font-weight:700;line-height:1.35}
.fb-head-m{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px;font-size:13px}
.fb-msgs{flex:1;min-height:0;overflow-y:auto;padding:18px 22px;display:flex;flex-direction:column;gap:16px}
.fb-msg{max-width:78%;animation:enterUp .3s var(--ease) both}
.fb-msg.admin{align-self:flex-end}
.fb-msg-h{display:flex;align-items:center;gap:8px;font-size:12px;margin-bottom:6px}
.fb-msg.admin .fb-msg-h{flex-direction:row-reverse}
.fb-msg-h b{font-size:13px;font-weight:500}
.fb-msg p{padding:10px 14px;border-radius:10px;background:var(--sunk);line-height:1.7;white-space:pre-wrap;word-break:break-word}
.fb-msg.user p{border-top-left-radius:3px}
.fb-msg.admin p{background:var(--accent-soft);border-top-right-radius:3px}
.fb-reply{flex:none;padding:12px 22px 16px;border-top:1px solid var(--line)}
.fb-quick{margin-bottom:10px}
.fb-quick .chip{height:26px}
.fb-reply .textarea{min-height:74px}
.fb-reply-foot{display:flex;align-items:center;justify-content:space-between;margin-top:10px}
.fb-reply-foot .toggle-row{min-height:0;gap:8px;font-size:13px;color:var(--muted);cursor:pointer}
.fb-closed{flex:none;padding:16px 22px;border-top:1px solid var(--line);font-size:13px}
@media (max-width:900px){
  .fb{grid-template-columns:minmax(0,1fr);margin-top:16px;min-height:calc(100vh - 230px)}
  .fb-list{border-right:0}
  .fb.has-sel .fb-list{display:none}
  .fb:not(.has-sel) .fb-thread{display:none}
  .fb-back{display:inline-flex}
  .fb-head{padding:14px 14px 12px}
  .fb-msgs{padding:14px}
  .fb-msg{max-width:92%}
  .fb-reply{padding:10px 14px 14px}
}

/* ---------- 系统设置 ---------- */
.ann-list{display:flex;flex-direction:column;gap:12px}
.ann{padding:18px 20px 14px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);animation:enterUp .34s var(--ease) both}
.ann.is-dim{border-style:dashed}
.ann.is-dim h2,.ann.is-dim p{opacity:.6}
.ann-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ann-top h2{font-family:var(--f-serif);font-size:18px;font-weight:700;min-width:0}
.ann-meta{margin-left:auto;font-size:12px;color:var(--faint)}
.ann p{margin-top:8px;line-height:1.75;color:var(--ink-2)}
.ann-acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}
.ann-acts .danger-text{margin-left:auto}

/* ---------- 处置台公告 ---------- */
.notice{display:flex;align-items:flex-start;gap:12px;margin-top:18px;padding:12px 14px 12px 16px;border-radius:8px;background:var(--accent-soft);color:var(--ink);animation:enterUp .34s var(--ease) both}
.notice .tag{background:var(--surface);flex:none;margin-top:1px}
.notice-t{flex:1;min-width:0;line-height:1.6;font-size:13.5px}
.notice-t b{font-weight:500;margin-right:6px}
.notice-t span{color:var(--ink-2)}
.notice .btn{flex:none;margin:-3px -4px -3px 0}
.grp .card-head [type=submit]{transition:opacity .2s,transform .2s var(--ease)}
.grp .card-head [type=submit]:disabled:not(.is-busy){opacity:0;transform:translateY(3px);pointer-events:none}
.tbl .stack-cell > .tag{display:inline-flex;width:auto;margin-bottom:2px}
.field > .seg{align-self:flex-start;max-width:100%;overflow-x:auto}
.drawer:focus,.drawer:focus-visible,.palette:focus-visible{outline:none}
@media (max-width:900px){
  .fb-quick{flex-wrap:nowrap;overflow-x:auto;margin:0 -14px 10px;padding:0 14px;scrollbar-width:none}
  .fb-quick::-webkit-scrollbar{display:none}
  .fb-quick .chip{flex:none}
}
.tbl .stack-cell{white-space:nowrap}
@media (max-width:760px){
  .tabs-row{flex-wrap:wrap;border-bottom:0;gap:0}
  .tabs-row .tabs{flex:1 1 100%;border-bottom:1px solid var(--line)}
  .tabs-row > .row-tools,.tabs-row > .input-ic,.tabs-row > .btn,.tabs-row > .seg{order:2;margin:12px 0 0!important}
  .tabs-row > .input-ic,.tabs-row > .row-tools:has(.input-ic){width:100%!important}
  .tabs-row > .row-tools .input-ic{width:100%!important}
  .tbl td.act .hide-sm{display:none}
}

/* ==========================================================
   完整版对接：一键接入表单 + 一键迁移进度
   ========================================================== */
.bridge-join .bridge-form { display:grid; gap:14px; grid-template-columns:1.4fr 1.4fr auto; align-items:end; margin:16px 0 10px }
.bridge-join .bridge-form .field { margin:0 }
@media (max-width:760px){ .bridge-join .bridge-form { grid-template-columns:1fr } }

.bridge-mig { margin-top:16px; border-top:1px solid var(--line); padding-top:16px }
.mig-idle { display:flex; gap:16px; align-items:center; flex-wrap:wrap }
.mig-idle > div { flex:1; min-width:260px; display:flex; flex-direction:column; gap:3px }
.mig-idle b { display:flex; align-items:center; gap:7px; font-size:14px }
.mig-idle .faint { font-size:12.5px; line-height:1.7 }
.mig-last { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-top:14px; padding:10px 12px;
  border:1px solid var(--line); border-radius:9px; font-size:13px }
.mig-last.failed { border-color:color-mix(in srgb, var(--c-high) 45%, var(--line)) }
.mig-last details { flex-basis:100%; margin-top:4px }
.mig-warn { margin:6px 0 0; padding-left:18px; font-size:12.5px; line-height:1.8; color:var(--dim) }

.mig-run .mig-head { display:flex; align-items:center; gap:9px; margin-bottom:10px; font-size:14px }
.mig-run .meter.lg { height:9px }
.mig-phases { display:flex; flex-wrap:wrap; gap:7px; margin-top:12px }
.mig-ph { display:inline-flex; align-items:center; gap:6px; padding:4px 10px; border:1px solid var(--line);
  border-radius:20px; font-size:12px; color:var(--dim) }
.mig-ph svg { width:13px; height:13px }
.mig-ph b { font-weight:500 }
.mig-ph i { font-style:normal; opacity:.75 }
.mig-ph.done { border-color:color-mix(in srgb, var(--c-ok) 40%, var(--line)); color:var(--c-ok) }
.mig-ph.running { border-color:var(--brand); color:var(--brand) }
.mig-ph.running svg { animation:spin 1.1s linear infinite }
.mig-ph.failed { border-color:color-mix(in srgb, var(--c-high) 45%, var(--line)); color:var(--c-high) }
.mig-ph.skipped { opacity:.45 }
@keyframes spin { to { transform:rotate(360deg) } }

.mig-pick { display:flex; flex-direction:column; gap:16px }
.mig-teams { display:grid; gap:8px; grid-template-columns:repeat(auto-fill,minmax(230px,1fr)); max-height:300px; overflow:auto }
.mig-team { display:flex; gap:9px; align-items:flex-start; padding:10px 12px; border:1px solid var(--line);
  border-radius:9px; cursor:pointer }
.mig-team:hover { border-color:var(--brand) }
.mig-team.is-done { opacity:.45; cursor:not-allowed }
.mig-team span { display:flex; flex-direction:column; gap:2px; min-width:0 }
.mig-team small { font-size:11.5px }
.mig-plan { min-height:44px; padding:12px 14px; border:1px solid var(--line); border-radius:9px; background:var(--soft) }
.mig-rows { display:flex; flex-wrap:wrap; gap:6px 16px; align-items:baseline; font-size:13px }
.mig-rows > span { display:inline-flex; gap:6px }
.mig-rows i { font-style:normal; color:var(--dim) }

/* ==========================================================
   QQ 机器人：botapi 调用记录
   ========================================================== */
.qq-calls { margin-top:16px; border-top:1px solid var(--line); padding-top:14px }
.qq-calls-h { display:flex; align-items:center; gap:9px; flex-wrap:wrap; font-size:13px; margin-bottom:10px }
.qq-call-list { display:flex; flex-direction:column; max-height:440px; overflow:auto;
  border:1px solid var(--line); border-radius:9px }
.qq-call { border-bottom:1px solid var(--line) }
.qq-call:last-child { border-bottom:0 }
.qq-call > summary { display:flex; align-items:center; gap:9px; padding:7px 12px; cursor:pointer; font-size:12.5px; list-style:none }
.qq-call > summary::-webkit-details-marker { display:none }
.qq-call > summary:hover { background:var(--soft) }
.qq-call.bad > summary { background:color-mix(in srgb, var(--c-high) 7%, transparent) }
.qq-call-b { padding:4px 12px 12px; display:grid; gap:10px; grid-template-columns:1fr 1fr }
@media (max-width:760px){ .qq-call-b { grid-template-columns:1fr } }
.qq-call-b pre { margin:0; padding:9px 11px; background:var(--soft); border-radius:7px; font-size:11.5px;
  line-height:1.65; max-height:190px; overflow:auto; white-space:pre-wrap; word-break:break-all }

/* 打乱对话框：保护谁的两个开关 */
.shf-prot-box { display:flex; flex-direction:column; gap:2px; margin-top:4px; padding:4px 0;
  border-top:1px solid var(--line) }
.shf-prot-box .toggle-row { min-height:0; padding:9px 0 }
.shf-prot-box small { display:block; font-size:11.5px; color:var(--dim); margin-top:2px }

/* QQ 机器人：扫码添加 */
.qb-add{display:flex;gap:18px;align-items:center;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--surface);margin-bottom:12px}
.qb-qr{width:168px;height:168px;flex:none;border-radius:10px;background:#fff;padding:6px;box-sizing:border-box}
.qb-add p{margin:6px 0 10px;font-size:13px;line-height:1.7}
.qb-add-acts{display:flex;gap:8px;flex-wrap:wrap}
@media (max-width:560px){.qb-add{flex-direction:column;align-items:flex-start}}
/* 站点配置：图片字段 */
.img-field{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.img-prev{width:96px;height:96px;object-fit:contain;border:1px solid var(--line);border-radius:8px;background:#fff}
