/* styles.css — 六合彩收单机器人 · 管理后台统一样式表
   设计基线：8px 间距节奏 / 单一强调色 / 柔和分层阴影 / 14px 圆角 */

:root{
  /* 底色与面板 —— 色值取自参考版后台 BLUE_THEME（admin/app/theme/LightTheme.ts） */
  --bg:#f0f5f9; --bg-soft:#f5f8fb; --panel:#ffffff; --panel-2:#f6f9fc; --panel-3:#eef2f6;
  /* 描边 */
  --line:#e5eaef; --line-2:#eef2f6; --line-3:#dfe5ef;
  /* 文字 */
  --text:#2a3547; --text-2:#3d4757; --muted:#707a82; --muted-2:#93a0ad;
  /* 主题色 */
  --brand:#0085db; --brand-2:#2e9fe8; --brand-dark:#0069ad; --brand-soft:#e5f3fb;
  --ok:#22a06b; --ok-soft:#dffff3;
  --warn:#d9942f; --warn-soft:#fff6ea;
  --danger:#e2574a; --danger-soft:#ffede9;
  --info:#2ba7cb; --info-soft:#e1f5fa;
  /* 形状与阴影 */
  --radius:14px; --radius-sm:9px; --radius-xs:7px;
  --shadow-1:0 1px 2px rgba(16,24,40,.05);
  --shadow-2:0 1px 2px rgba(16,24,40,.04),0 10px 26px -12px rgba(16,24,40,.20);
  --shadow-3:0 24px 64px -20px rgba(12,22,48,.32);
  --ring:0 0 0 3.5px rgba(0,133,219,.16);
  /* 侧栏 */
  --sidebar:#2a3447; --sidebar-2:#344054; --sidebar-line:rgba(255,255,255,.08);
  --sidebar-text:#c3cddb; --sidebar-muted:#8b98ab;
  --topbar-h:64px;
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--text);
  font:14px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",Roboto,"Helvetica Neue",Arial,sans-serif;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
a{color:var(--brand);text-decoration:none;transition:color .12s ease}
a:hover{color:var(--brand-dark);text-decoration:none}
code{background:var(--panel-3);color:#2b3445;padding:1px 6px;border-radius:5px;font-size:12.5px;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;border:1px solid var(--line-2)}
.hidden{display:none !important}
.muted{color:var(--muted)}
.mono{font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;font-size:12.5px}
.nowrap{white-space:nowrap}
.right{text-align:right}
.center{text-align:center}
::selection{background:rgba(47,107,255,.18)}

/* 滚动条 */
.nav::-webkit-scrollbar,.table-scroll::-webkit-scrollbar,.modal-body::-webkit-scrollbar,
pre.json::-webkit-scrollbar,.quote::-webkit-scrollbar{width:8px;height:8px}
.nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:8px}
.table-scroll::-webkit-scrollbar-thumb,.modal-body::-webkit-scrollbar-thumb,
pre.json::-webkit-scrollbar-thumb{background:#d3dae7;border-radius:8px}
.nav::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.24)}
.table-scroll::-webkit-scrollbar-thumb:hover,.modal-body::-webkit-scrollbar-thumb:hover{background:#bcc6d8}
.nav::-webkit-scrollbar-track,.table-scroll::-webkit-scrollbar-track,
.modal-body::-webkit-scrollbar-track,pre.json::-webkit-scrollbar-track{background:transparent}

:focus-visible{outline:none;box-shadow:var(--ring);border-radius:6px}

/* ---------- boot ---------- */
.boot{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;color:var(--muted);
  background:radial-gradient(1200px 600px at 50% -10%,#e8eeff 0%,transparent 60%),var(--bg)}
.spinner{width:36px;height:36px;border:3px solid #d8e0ee;border-top-color:var(--brand);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ---------- layout ---------- */
.shell{display:flex;min-height:100vh}
.sidebar{width:244px;flex:0 0 244px;background:var(--sidebar);color:var(--sidebar-text);display:flex;flex-direction:column;
  position:sticky;top:0;height:100vh;border-right:1px solid rgba(0,0,0,.35)}
.brand{display:flex;align-items:center;gap:11px;padding:18px 18px 16px;border-bottom:1px solid var(--sidebar-line)}
.brand-mark{display:grid;place-items:center;width:38px;height:38px;flex:0 0 38px;border-radius:11px;
  background:linear-gradient(135deg,#3d7bff,#8a5cff);color:#fff;font-weight:700;font-size:13px;letter-spacing:.6px;
  box-shadow:0 6px 16px -6px rgba(61,123,255,.9),inset 0 1px 0 rgba(255,255,255,.35)}
.brand strong{display:block;color:#fff;font-size:14.5px;letter-spacing:.2px}
.brand small{color:var(--sidebar-muted);font-size:11.5px;display:block;margin-top:1px}
.brand>div{min-width:0}
.nav{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:10px 10px 16px}
.nav-group{margin:12px 0 5px;padding:0 10px;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;
  color:#5f6d8a;font-weight:700}
.nav-group:first-child{margin-top:4px}
.nav a{position:relative;display:flex;align-items:center;gap:10px;padding:7px 10px;margin:1px 0;border-radius:9px;
  color:var(--sidebar-text);font-size:13.5px;transition:background .14s ease,color .14s ease}
.nav a:hover{background:var(--sidebar-2);text-decoration:none;color:#fff}
.nav a.active{background:linear-gradient(90deg,rgba(0,133,219,.95),rgba(0,133,219,.45));color:#fff;font-weight:600;
  box-shadow:0 8px 18px -10px rgba(61,123,255,.95)}
.nav a.active::before{content:"";position:absolute;left:-10px;top:50%;transform:translateY(-50%);
  width:3px;height:18px;border-radius:0 3px 3px 0;background:#8fb2ff}
.nav a .ic{width:20px;flex:0 0 20px;display:grid;place-items:center;opacity:.78}
.nav a:hover .ic,.nav a.active .ic{opacity:1}
.nav a .ic svg{width:16.5px;height:16.5px;display:block}
.nav a .cnt{margin-left:auto;font-size:11px;background:rgba(255,255,255,.13);padding:1px 7px;border-radius:20px}
.sidebar-foot{padding:12px 18px;border-top:1px solid var(--sidebar-line);font-size:11.5px;color:var(--sidebar-muted);
  display:flex;align-items:center;gap:7px}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{display:flex;align-items:center;gap:14px;padding:0 24px;height:var(--topbar-h);background:rgba(255,255,255,.86);
  backdrop-filter:saturate(180%) blur(10px);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}
.topbar-title{flex:1;min-width:0}
.topbar-title h1{margin:0;font-size:18px;letter-spacing:-.2px;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar-title p{margin:1px 0 0;color:var(--muted-2);font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar-actions{display:flex;align-items:center;gap:8px}
.who{text-align:right;line-height:1.3;padding-left:12px;margin-left:2px;border-left:1px solid var(--line-3)}
.who span{display:block;font-size:13.5px;font-weight:600}
.who small{color:var(--muted);font-size:11.5px}
.view{padding:22px 24px 56px;flex:1;min-width:0}
.view>*+*{margin-top:16px}
.only-mobile{display:none}

/* ---------- prime cards ---------- */
.grid{display:grid;gap:16px}
.grid.cols-2{grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}
.grid.cols-3{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.grid.cols-4{grid-template-columns:repeat(auto-fit,minmax(212px,1fr))}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-2);padding:18px}
.card h3{margin:-2px 0 14px;padding-bottom:12px;font-size:14.5px;font-weight:650;letter-spacing:-.1px;
  display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--line-2);color:var(--text)}
.card h3::before{content:"";width:3px;height:14px;border-radius:3px;background:linear-gradient(180deg,var(--brand),var(--brand-2));flex:0 0 3px}
.card h3 .sub{font-weight:400;color:var(--muted);font-size:12px}
.card.v-danger{border-color:#f4d3d6;background:#fffbfb;color:var(--danger)}
.kpi{position:relative;overflow:hidden;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px 18px;box-shadow:var(--shadow-2);transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease}
.kpi::before{content:"";position:absolute;left:0;top:14px;bottom:14px;width:3px;border-radius:0 3px 3px 0;
  background:linear-gradient(180deg,#dbe3f2,#c9d5ea)}
.kpi:hover{transform:translateY(-1px);box-shadow:0 2px 4px rgba(16,24,40,.05),0 16px 32px -16px rgba(16,24,40,.32);border-color:var(--line-3)}
.kpi .k{color:var(--muted);font-size:12.5px;display:flex;justify-content:space-between;align-items:center;gap:8px}
.kpi .v{font-size:24px;font-weight:700;margin-top:8px;letter-spacing:-.5px;font-variant-numeric:tabular-nums;line-height:1.15}
.kpi .d{font-size:12px;color:var(--muted-2);margin-top:5px}
.kpi:has(.v-brand)::before{background:linear-gradient(180deg,var(--brand),var(--brand-2))}
.kpi:has(.v-ok)::before{background:linear-gradient(180deg,var(--ok),#4cc48c)}
.kpi:has(.v-warn)::before{background:linear-gradient(180deg,var(--warn),#e0a94a)}
.kpi:has(.v-danger)::before{background:linear-gradient(180deg,var(--danger),#ef8087)}
.v-ok{color:var(--ok)}.v-warn{color:var(--warn)}.v-danger{color:var(--danger)}.v-brand{color:var(--brand)}
.money{font-variant-numeric:tabular-nums;font-weight:600}
.money.neg{color:var(--danger)}
.money.pos{color:var(--ok)}
/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line-3);
  background:var(--panel);color:var(--text-2);padding:0 14px;height:34px;border-radius:var(--radius-sm);cursor:pointer;
  font-size:13px;font-weight:550;font-family:inherit;transition:background .13s ease,border-color .13s ease,color .13s ease,box-shadow .13s ease;
  white-space:nowrap;box-shadow:var(--shadow-1)}
.btn:hover{border-color:#c9d3e6;background:var(--panel-2);color:var(--text)}
.btn:active{transform:translateY(.5px)}
.btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}
.btn:disabled:hover{background:var(--panel);border-color:var(--line-3);color:var(--text-2)}
.btn.primary{background:linear-gradient(180deg,var(--brand-2),var(--brand));border-color:var(--brand-dark);color:#fff;
  box-shadow:0 1px 2px rgba(30,79,216,.28),inset 0 1px 0 rgba(255,255,255,.24)}
.btn.primary:hover{background:linear-gradient(180deg,var(--brand),var(--brand-dark));border-color:var(--brand-dark);color:#fff}
.btn.danger{background:linear-gradient(180deg,#e4545c,var(--danger));border-color:#bf2f37;color:#fff;
  box-shadow:0 1px 2px rgba(191,47,55,.28),inset 0 1px 0 rgba(255,255,255,.2)}
.btn.danger:hover{background:linear-gradient(180deg,var(--danger),#bf2f37);border-color:#bf2f37;color:#fff}
.btn.ok{background:linear-gradient(180deg,#19a86d,var(--ok));border-color:#0c7a4e;color:#fff;
  box-shadow:0 1px 2px rgba(12,122,78,.26),inset 0 1px 0 rgba(255,255,255,.2)}
.btn.ok:hover{background:linear-gradient(180deg,var(--ok),#0c7a4e);border-color:#0c7a4e;color:#fff}
.btn.warn{background:linear-gradient(180deg,#d98c14,var(--warn));border-color:#a56606;color:#fff;
  box-shadow:0 1px 2px rgba(165,102,6,.24),inset 0 1px 0 rgba(255,255,255,.2)}
.btn.warn:hover{background:linear-gradient(180deg,var(--warn),#a56606);border-color:#a56606;color:#fff}
.btn.ghost{background:transparent;border-color:transparent;color:var(--muted);box-shadow:none}
.btn.ghost:hover{background:var(--panel-2);color:var(--text);border-color:var(--line)}
.btn.sm{padding:0 10px;height:28px;font-size:12.5px;border-radius:var(--radius-xs)}
.btn.block{width:100%;height:42px;padding:0 16px;font-size:14px}
.btn-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.icon-btn{border:1px solid transparent;background:transparent;font-size:18px;cursor:pointer;padding:0;width:32px;height:32px;
  display:inline-grid;place-items:center;border-radius:var(--radius-sm);color:var(--muted);transition:.13s ease;line-height:1}
.icon-btn:hover{background:var(--panel-3);color:var(--text)}

/* ---------- forms ---------- */
label{display:block;margin:0 0 14px}
label>span{display:block;font-size:12.5px;color:var(--text-2);font-weight:550;margin-bottom:6px}
input,select,textarea{width:100%;padding:0 11px;height:36px;border:1px solid var(--line-3);border-radius:var(--radius-sm);
  font-size:13.5px;background:#fff;color:var(--text);font-family:inherit;transition:border-color .13s ease,box-shadow .13s ease}
select{padding-right:30px;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2369748b' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center}
input::placeholder,textarea::placeholder{color:var(--muted-2)}
input:hover,select:hover,textarea:hover{border-color:#ccd5e5}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand);box-shadow:var(--ring)}
input[type=checkbox]{width:16px;height:16px;accent-color:var(--brand);cursor:pointer}
textarea{min-height:84px;height:auto;padding:9px 11px;resize:vertical;line-height:1.55}
.form-grid{display:grid;gap:0 16px;grid-template-columns:repeat(auto-fit,minmax(232px,1fr))}
.form-grid .full{grid-column:1/-1}
.form-grid textarea{min-height:172px;line-height:1.55;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;font-size:12.5px}
.check{display:flex;align-items:center;flex-wrap:wrap;gap:9px;margin:0 0 14px;padding:8px 11px;background:var(--panel-2);
  border:1px solid var(--line-2);border-radius:var(--radius-sm)}
.check>.hint{flex-basis:100%;margin:2px 0 0}
.check input{width:auto;height:auto}
.check span{margin:0;font-weight:500;color:var(--text-2)}
.hint{font-size:12px;color:var(--muted-2);margin:6px 0 14px;line-height:1.5}
/* 表单里紧跟输入框的说明：绝不能用负外边距，否则文字会压到输入框上 */
label>.hint{margin:6px 0 0}

/* ---------- toolbar ---------- */
.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:14px;background:var(--panel);
  border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow-2)}
.toolbar .grow{flex:1;min-width:150px}
.toolbar input,.toolbar select{min-width:118px;height:34px;font-size:13px}
.toolbar input.search{min-width:210px;flex:0 1 260px;padding-left:33px;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='%238b95a8' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='16.5' y1='16.5' x2='21' y2='21'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:11px center}
.toolbar-filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.toolbar-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-left:auto}
.toolbar-filters+.toolbar-actions{position:relative}

/* ---------- table ---------- */
.table-wrap{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-2);overflow:hidden}
.table-scroll{overflow-x:auto;overscroll-behavior-x:contain}
table.data{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
table.data th{background:var(--panel-2);text-align:left;padding:11px 14px;font-size:11.5px;color:var(--muted);
  font-weight:650;letter-spacing:.05em;text-transform:uppercase;border-bottom:1px solid var(--line);white-space:nowrap;position:relative}
table.data th.sortable{cursor:pointer;user-select:none;transition:color .12s ease,background .12s ease}
table.data th.sortable:hover{color:var(--brand);background:#eef3ff}
table.data th .arrow{font-size:9px;margin-left:5px;color:var(--brand);vertical-align:1px}
table.data td{padding:11px 14px;border-bottom:1px solid var(--line-2);vertical-align:middle;color:var(--text-2)}
table.data tbody tr{transition:background .1s ease}
table.data tbody tr:hover{background:#f8faff}
table.data tbody tr:last-child td{border-bottom:none}
table.data tbody tr.clickable{cursor:pointer}
table.data td.actions{white-space:nowrap;text-align:right}
table.data td:first-child{color:var(--text)}
table.data .btn.sm+.btn.sm{margin-left:6px}
.empty{padding:44px 20px;text-align:center;color:var(--muted-2);font-size:13px}
.empty::before{content:"";display:block;width:42px;height:42px;margin:0 auto 12px;border-radius:12px;
  background:var(--panel-3) url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23a6b0c3' stroke-width='1.8' stroke-linecap='round'%3E%3Crect x='3' y='4' width='18' height='16' rx='2'/%3E%3Cline x1='3' y1='9' x2='21' y2='9'/%3E%3Cline x1='9' y1='9' x2='9' y2='20'/%3E%3C/svg%3E") center/20px no-repeat;border:1px solid var(--line-2)}
td.empty::before{margin-top:0}
.pager{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 14px;border-top:1px solid var(--line);flex-wrap:wrap;background:var(--panel-2)}
.pager .pages{display:flex;gap:4px;align-items:center}
.pager .pages button{min-width:32px;height:30px;padding:0 9px;border:1px solid var(--line-3);background:#fff;border-radius:var(--radius-xs);
  cursor:pointer;font-size:12.5px;color:var(--text-2);font-family:inherit;transition:.12s ease}
.pager .pages button:hover:not(:disabled){border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}
.pager .pages button.active{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600;box-shadow:0 1px 3px rgba(47,107,255,.35)}
.pager .pages button:disabled{opacity:.42;cursor:not-allowed}
.pager .meta{color:var(--muted);font-size:12.5px}

/* ---------- badges / chips ---------- */
.badge{display:inline-flex;align-items:center;padding:1.5px 9px;border-radius:20px;font-size:11.5px;font-weight:600;
  background:var(--panel-3);color:#48536a;border:1px solid transparent;white-space:nowrap;line-height:1.6}
.badge.ok{background:var(--ok-soft);color:#0b7a44}
.badge.warn{background:var(--warn-soft);color:#a4650a}
.badge.danger{background:var(--danger-soft);color:#b8232b}
.badge.info{background:var(--info-soft);color:#086b83}
.badge.brand{background:var(--brand-soft);color:#0b6ba8}
.badge.muted{background:var(--panel-3);color:#69748a}
.dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:7px;background:var(--muted-2);vertical-align:1px;
  box-shadow:0 0 0 3px rgba(139,149,168,.14)}
.dot.ok{background:var(--ok);box-shadow:0 0 0 3px rgba(34,160,107,.16)}
.dot.danger{background:var(--danger);box-shadow:0 0 0 3px rgba(226,87,74,.16)}
.dot.warn{background:var(--warn);box-shadow:0 0 0 3px rgba(217,148,47,.16)}

/* ---------- modal / drawer / toast ---------- */
.backdrop{position:fixed;inset:0;background:rgba(15,22,40,.5);backdrop-filter:blur(3px);display:flex;align-items:center;
  justify-content:center;z-index:80;padding:22px;animation:fadeIn .14s ease}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.modal{background:#fff;border-radius:16px;box-shadow:var(--shadow-3);width:100%;max-width:568px;max-height:88vh;
  display:flex;flex-direction:column;animation:popIn .16s cubic-bezier(.2,.9,.3,1.1)}
@keyframes popIn{from{transform:translateY(8px) scale(.985);opacity:.5}to{transform:none;opacity:1}}
.modal.wide{max-width:900px}
.modal-head{display:flex;align-items:center;gap:10px;padding:16px 20px;border-bottom:1px solid var(--line-2)}
.modal-head h3{margin:0;font-size:16px;flex:1;font-weight:650;letter-spacing:-.1px}
.modal-body{padding:18px 20px;overflow-y:auto}
.modal-foot{display:flex;justify-content:flex-end;gap:9px;padding:14px 20px;border-top:1px solid var(--line-2);
  background:var(--panel-2);border-radius:0 0 16px 16px}
.drawer-backdrop{position:fixed;inset:0;background:rgba(15,22,40,.44);backdrop-filter:blur(3px);z-index:70;animation:fadeIn .14s ease}
.drawer{position:fixed;top:0;right:0;height:100vh;width:min(640px,96vw);background:#fff;z-index:75;
  box-shadow:-18px 0 50px -12px rgba(10,20,40,.35);display:flex;flex-direction:column;animation:slideIn .2s cubic-bezier(.2,.9,.3,1)}
@keyframes slideIn{from{transform:translateX(28px);opacity:.5}to{transform:none;opacity:1}}
.toasts{position:fixed;right:20px;bottom:20px;display:flex;flex-direction:column;gap:9px;z-index:120}
.toast{position:relative;background:#1b2436;color:#fff;padding:11px 15px 11px 17px;border-radius:11px;font-size:13px;
  box-shadow:0 14px 36px -10px rgba(10,20,40,.5);max-width:390px;overflow:hidden;animation:slideIn .18s ease}
.toast::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:#5b708f}
.toast.ok{background:#0e6b45}.toast.ok::before{background:#3fd08c}
.toast.err{background:#a81f27}.toast.err::before{background:#ff8c92}
.toast.warn{background:#8f5a06}.toast.warn::before{background:#ffc766}
.kv{display:grid;grid-template-columns:136px 1fr;gap:0;font-size:13px}
.kv dt{color:var(--muted);padding:8px 12px 8px 0;border-bottom:1px dashed var(--line-2);align-self:stretch}
.kv dd{margin:0;padding:8px 0;word-break:break-word;border-bottom:1px dashed var(--line-2);color:var(--text)}
.kv dt:last-of-type,.kv dd:last-of-type{border-bottom:none}
.section-title{margin:24px 0 12px;font-size:14px;font-weight:650;display:flex;align-items:center;gap:9px;color:var(--text);letter-spacing:-.1px}
.section-title::before{content:"";width:3px;height:15px;border-radius:3px;background:linear-gradient(180deg,var(--brand),var(--brand-2))}
.section-title:first-child{margin-top:0}
pre.json{background:#0f1729;color:#cfe3ff;padding:14px 16px;border-radius:11px;overflow:auto;font-size:12px;
  max-height:320px;line-height:1.6;border:1px solid #1d2740}
.switch{display:inline-flex;align-items:center;gap:8px;cursor:pointer}
.switch input{width:auto;height:auto}
/* ---------- login ---------- */
.login-body{background:
    radial-gradient(900px 500px at 12% -10%,rgba(47,107,255,.16),transparent 62%),
    radial-gradient(800px 520px at 92% 8%,rgba(138,92,255,.14),transparent 60%),
    linear-gradient(160deg,#f3f6fc,#eef2fa 55%,#eef7f5);
  display:grid;place-items:center;min-height:100vh;padding:24px 0}
.login-wrap{width:100%;max-width:432px;padding:0 24px}
.login-card{position:relative;background:#fff;border:1px solid var(--line);border-radius:18px;
  box-shadow:0 28px 70px -24px rgba(20,40,90,.32),0 1px 2px rgba(16,24,40,.05);padding:28px 28px 24px;overflow:hidden}
.login-card::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:linear-gradient(90deg,#3d7bff,#8a5cff 55%,#19c0a0)}
.login-brand{border:none;padding:0 0 18px}
.login-brand .brand-mark{box-shadow:0 8px 18px -8px rgba(61,123,255,.85),inset 0 1px 0 rgba(255,255,255,.35)}
.login-brand strong{color:var(--text);font-size:15px}
.login-brand small{color:var(--muted);font-size:11.5px}
.login-card h1{margin:0 0 4px;font-size:21px;letter-spacing:-.3px}
.login-card>p{margin:0 0 20px;font-size:13px}
.login-error{background:var(--danger-soft);color:#b8232b;border:1px solid #f6d5d8;border-radius:var(--radius-sm);
  padding:10px 13px;font-size:13px;margin-bottom:14px}
.captcha-field{display:flex;gap:9px;align-items:stretch}
.captcha-field input{flex:1;min-width:0;letter-spacing:3px;text-transform:uppercase;font-weight:600;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace}
.captcha-image{flex:0 0 124px;height:36px;padding:0;border:1px solid var(--line-3);border-radius:var(--radius-sm);
  background:var(--panel-2);cursor:pointer;overflow:hidden;display:block;line-height:0;transition:.13s ease}
.captcha-image svg{display:block;width:100%;height:100%}
.captcha-image:hover{border-color:var(--brand);background:#fff}
.captcha-image[disabled]{opacity:.55;cursor:progress}
.login-card .hint{margin:6px 0 0}
.login-foot{display:flex;justify-content:space-between;align-items:center;margin-top:18px;padding-top:16px;
  border-top:1px solid var(--line-2);font-size:12.5px;color:var(--muted)}
.login-tip{text-align:center;color:var(--muted-2);font-size:12px;margin-top:16px;line-height:1.6}
.login-tip code{font-size:11.5px}

/* ---------- 状态行（Dashboard 运行状态） ---------- */
.status-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 0;border-bottom:1px dashed var(--line-2)}
.status-row:last-child{border-bottom:none}
.status-row .lbl{display:flex;align-items:center;min-width:0}
.status-row .val{color:var(--muted);text-align:right;word-break:break-all}

/* ---------- responsive ---------- */
@media (max-width:900px){
  .sidebar{position:fixed;left:0;top:0;z-index:60;transform:translateX(-100%);transition:transform .22s cubic-bezier(.2,.9,.3,1)}
  .shell.nav-open .sidebar{transform:none;box-shadow:0 0 0 100vmax rgba(10,20,40,.42)}
  .only-mobile{display:inline-grid}
  .view{padding:14px 13px 44px}
  .view>*+*{margin-top:13px}
  .topbar{padding:0 14px;height:58px}
  .who{display:none}
  .grid{gap:12px}
  .card{padding:15px}
  .toolbar{padding:11px}
  .toolbar .search,.toolbar input.search{flex:1 1 100%}
  .toolbar-actions{margin-left:0;width:100%}
  .kv{grid-template-columns:112px 1fr}
  .toasts{left:14px;right:14px;bottom:14px}
  .toast{max-width:none}
}

/* ---------- 其它 ---------- */
.nav a .nav-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.perm-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.chip{display:inline-block;padding:2.5px 10px;border-radius:20px;background:var(--brand-soft);color:#3b4a66;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;font-size:11.5px;border:1px solid #dde6fa}
table.data td .clamp,.clamp{display:inline-block;max-width:420px;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;vertical-align:bottom}
.quote{background:var(--panel-2);border:1px solid var(--line);border-left:3px solid var(--brand);
  border-radius:10px;padding:12px 14px;font-size:13px;white-space:pre-wrap;word-break:break-word;margin-bottom:12px;line-height:1.65}
.card .muted.mono{word-break:break-all}
@media print{.sidebar,.topbar,.toolbar,.pager{display:none}.view{padding:0}}


/* ==== 系统设置：搜索工具条 + 分组折叠 ==================================== */
.settings-tools{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 14px;
  padding:10px 12px;background:var(--panel-2);border:1px solid var(--line);
  border-radius:var(--radius-sm)}
.settings-tools .grow{flex:1 1 260px;min-width:200px}
.settings-tools .grow input{width:100%}
.settings-tools label{display:inline-flex;align-items:center;gap:6px;color:var(--text-2)}
.settings-tools .count{color:var(--muted);font-size:12.5px;margin-left:auto}
.fold{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);
  box-shadow:var(--shadow-1);margin:0 0 12px;overflow:hidden}
.fold-head{display:flex;align-items:center;gap:10px;padding:11px 14px;cursor:pointer;
  background:var(--panel-2);user-select:none;transition:background .12s ease}
.fold-head:hover{background:var(--panel-3)}
.fold.open .fold-head{border-bottom:1px solid var(--line)}
.fold-head .arrow{color:var(--muted);font-size:10px;transition:transform .15s ease}
.fold.open .fold-head .arrow{transform:rotate(90deg)}
.fold-head .name{font-weight:650;font-size:13.5px}
.fold-head .spacer{flex:1}
.fold:not(.open) .fold-body{display:none}
.fold-body .table-wrap{border:none;border-radius:0;box-shadow:none}
.fold-body .data th{background:transparent}
.settings-empty{padding:26px;text-align:center;color:var(--muted)}
tr.changed td:first-child::after{content:"已改";margin-left:8px;padding:1px 7px;border-radius:20px;
  font-size:11px;font-weight:600;background:var(--brand-soft);color:#0b6ba8}

/* ---------- 玩法赔率：一个玩法一张卡 ---------- */
.modal.xwide{max-width:1180px}
.odds-note{margin:0 0 6px;padding:11px 14px;border:1px solid var(--line-3);border-left:3px solid var(--brand);
  border-radius:var(--radius-sm);background:var(--brand-soft);color:#28425e;font-size:12.5px;line-height:1.7}
.odds-note b{color:#0b6ba8}
.odds-group-desc{font-size:12px;color:var(--muted-2);margin:0 0 10px;line-height:1.5}
.odds-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(266px,1fr));margin-bottom:6px}
.odds-card{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-2);
  padding:12px 13px 13px;transition:border-color .12s ease,box-shadow .12s ease}
.odds-card:hover{border-color:#cfe0f2;box-shadow:var(--shadow-1)}
.odds-card .odds-head{display:flex;align-items:baseline;gap:8px;margin-bottom:11px;flex-wrap:wrap}
.odds-card .odds-head b{font-size:13.5px;font-weight:650;color:var(--text)}
.odds-card .odds-head .mono{color:var(--muted-2);font-size:11.5px}
.odds-card .odds-head .badge{font-size:10.5px;padding:1px 7px}
.odds-card .odds-fields{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(112px,1fr))}
.odds-card label{margin:0;display:flex;flex-direction:column;gap:5px}
.odds-card label>span{font-size:11.5px;color:var(--muted);font-weight:550;margin:0}
.odds-card input,.odds-card select{height:32px;font-size:13px;background:#fff}
.odds-card .odds-scope{margin-top:10px;grid-column:1/-1}
.odds-card .odds-scope-note{margin-top:10px;font-size:11.5px;color:var(--muted-2);grid-column:1/-1}
.odds-card .odds-toggle{display:inline-flex;flex-direction:row;align-items:center;gap:5px;margin:0 0 0 auto;font-size:11.5px;color:var(--muted);font-weight:550;padding:2px 9px;border:1px solid var(--line);border-radius:999px;background:#fff}
.odds-card .odds-toggle:hover{border-color:var(--muted-2)}
.odds-card .odds-toggle input{width:auto;height:auto;margin:0;accent-color:#1a7d46}
.odds-card .odds-toggle.is-on{border-color:#9ad3ae;background:#eefaf2;color:#1a7d46;font-weight:650}
.odds-card .odds-toggle.is-off{border-color:#f0b6b1;background:#fdf2f1;color:#b03a30;font-weight:650}
.odds-card .odds-toggle.is-off input{accent-color:#b03a30}
.odds-card.is-off{background:#f6f7f9}
.odds-card.is-off .odds-fields,.odds-card.is-off .odds-scope{opacity:.5}
.odds-card.is-off .odds-head b{color:var(--muted)}

/* ---------- 群管自动回复（pages-autoreply.js） ---------- */
.ar-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));margin-bottom:8px}
.ar-item{display:flex;flex-direction:column;gap:6px;padding:10px;border:1px solid var(--line);
  border-radius:var(--radius-sm);background:var(--panel-2);min-width:0}
.ar-thumb{height:112px;border-radius:var(--radius-xs);background:#eef2f8;display:flex;align-items:center;
  justify-content:center;cursor:pointer;overflow:hidden;border:1px dashed var(--line-3);transition:border-color .12s ease,background .12s ease}
.ar-thumb:hover{border-color:var(--brand);background:#e9f0ff}
.ar-name{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ar-item .btn-row{gap:6px}
.ar-preview{display:flex;flex-direction:column;align-items:center;gap:10px}
.ar-preview img{max-width:100%;max-height:62vh;border-radius:var(--radius-sm);border:1px solid var(--line);
  background:#fff;object-fit:contain}

/* ---------- 首页（pages-dashboard.js） ---------- */
.dash-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.dash-bar .btn-row{gap:10px}
.dash-bar .muted{font-size:12.5px}

.dash-recent{display:flex;flex-direction:column}
.dash-recent .dr-row{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:13px;
  border-bottom:1px dashed var(--line-2)}
.dash-recent .dr-row:last-child{border-bottom:none;padding-bottom:0}
.dash-recent .dr-who{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dash-recent .dr-amt{flex:0 0 auto;font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap}
.dash-recent .dr-amt.pos{color:var(--ok)}
.dash-recent .dr-amt.neg{color:var(--danger)}
.dash-recent .dr-time{flex:0 0 auto;color:var(--muted-2);font-size:11.5px;white-space:nowrap}
.dr-st{flex:0 0 auto;font-size:11.5px;line-height:1.6;padding:0 6px;border-radius:6px;
  background:var(--panel-3);color:var(--muted);white-space:nowrap}
.dr-st.ok{background:var(--ok-soft);color:var(--ok)}
.dr-st.warn{background:var(--warn-soft);color:var(--warn)}
.dr-st.danger{background:var(--danger-soft);color:var(--danger)}
.dr-st.info{background:var(--info-soft);color:var(--info)}
.recent-more{margin-left:auto}

/* ---------- 资金页统计条说明（pages-finance.js） ---------- */
.stats-note{font-size:12px;color:var(--muted-2);margin:-4px 0 14px;text-align:right}

/* =====================================================================
   紧凑布局（客户参考图：深色窄侧栏 + 面包屑 + 同级页签 + 密集面板）
   说明：本段在文件末尾，只做覆盖，不删除任何既有样式，改动可整段回滚。
   ===================================================================== */
:root{
  --radius:10px; --radius-sm:7px; --radius-xs:6px;
  --topbar-h:46px; --subtabs-h:36px;
  --sidebar:#232f42; --sidebar-2:#33405a;
}

/* ---------- 侧栏：更窄、分组可折叠 ---------- */
.sidebar{width:196px;flex:0 0 196px}
.brand{padding:11px 13px 10px;gap:9px}
.brand-mark{width:32px;height:32px;flex:0 0 32px;border-radius:9px;font-size:12px}
.brand strong{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand small{font-size:10.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nav{padding:8px 8px 12px}
.nav-group{margin:7px 0 2px;padding:0 8px;height:27px;border-radius:7px;font-size:11.5px;font-weight:650;
  letter-spacing:0;text-transform:none;color:#8ea0bd;cursor:pointer;user-select:none;
  display:flex;align-items:center;gap:6px}
.nav-group:hover{color:#fff;background:rgba(255,255,255,.06)}
.nav-group-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nav-group-caret{display:grid;place-items:center;width:14px;height:14px;opacity:.72;transition:transform .16s ease}
.nav-group-caret svg{width:11px;height:11px;display:block}
.nav-group.folded .nav-group-caret{transform:rotate(-90deg)}
.nav-items{display:block}
.nav a{padding:6px 9px;margin:1px 0;border-radius:7px;font-size:13px;gap:9px}
.nav a .ic{width:17px;flex:0 0 17px}
.nav a .ic svg{width:15px;height:15px}
.nav a.active{background:var(--brand);font-weight:600;box-shadow:none}
.nav a.active::before{display:none}
.sidebar-foot{padding:8px 13px;font-size:11px}
.shell.nav-mini .sidebar{display:none}
.nav-toggle{display:inline-grid}

/* ---------- 顶栏：一行面包屑 ---------- */
.topbar{padding:0 14px;gap:10px}
.crumb{flex:1;min-width:0;display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted)}
.crumb-root,.crumb-group{white-space:nowrap}
.crumb a{color:var(--muted)}
.crumb a:hover{color:var(--brand)}
.crumb-sep{color:#c3ccdb}
.crumb-cur{margin:0;font-size:14px;font-weight:650;letter-spacing:-.1px;color:var(--text);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:0 1 auto}
.crumb-hint{color:var(--muted-2);font-size:11.5px;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;flex:1 1 auto;min-width:0}
.topbar-actions{gap:6px}
.topbar-actions .btn{height:29px;padding:0 11px;font-size:12.5px}
.topbar-actions .icon-btn{width:29px;height:29px}
.who{padding-left:10px}
.who span{font-size:12.5px}
.who small{font-size:11px}

/* ---------- 同级页签行 ---------- */
.subtabs{display:flex;align-items:center;gap:6px;padding:0 14px;height:var(--subtabs-h);
  background:var(--panel);border-bottom:1px solid var(--line);overflow-x:auto;overflow-y:hidden;
  white-space:nowrap;position:sticky;top:var(--topbar-h);z-index:19}
.subtabs::-webkit-scrollbar{height:0}
.subtabs-label{color:var(--muted-2);font-size:11.5px;padding-right:4px;flex:0 0 auto}
.subtab{display:inline-flex;align-items:center;height:25px;padding:0 11px;border-radius:6px;flex:0 0 auto;
  font-size:12.5px;color:var(--text-2);background:var(--panel-3);border:1px solid transparent}
.subtab:hover{background:#e3e9f2;color:var(--text);text-decoration:none}
.subtab.active{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}

/* ---------- 内容区：压掉多余留白 ---------- */
.view{padding:10px 12px 22px}
.view>*+*{margin-top:8px}
.card{padding:10px 12px}
.card h3{margin:0 0 8px;padding-bottom:7px;font-size:13.5px}
.card h3::before{height:12px}
.grid{gap:8px}
.grid.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.grid.cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}
.grid.cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}
@media (max-width:1150px){
  .grid.cols-4,.grid.cols-5{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:960px){
  .grid.cols-4,.grid.cols-5{grid-template-columns:repeat(2,minmax(0,1fr))}
}
.kpi{padding:9px 11px;box-shadow:var(--shadow-1)}
.kpi::before{top:9px;bottom:9px}
.kpi .k{font-size:11.5px}
.kpi .v{font-size:18px;margin-top:3px;letter-spacing:-.3px}
.kpi .d{font-size:11px;margin-top:2px}
.section-title{margin:10px 0 6px;font-size:13px;gap:7px}
.section-title::before{height:12px}
.status-row{padding:5px 0;font-size:12.5px}
.dash-bar{margin-bottom:8px}
.stats-note{margin:-2px 0 8px}

/* ---------- 工具条 / 表格 / 分页 ---------- */
.toolbar{padding:7px 9px;margin-bottom:8px;gap:6px;box-shadow:var(--shadow-1)}
.toolbar input,.toolbar select{min-width:108px;height:30px;font-size:12.5px}
.toolbar input.search{min-width:176px;flex:0 1 220px;padding-left:30px;background-position:10px center;background-size:14px}
.toolbar .btn{height:30px;padding:0 11px;font-size:12.5px}
.toolbar-filters{gap:6px}
.toolbar-actions{gap:6px}
.table-wrap{box-shadow:var(--shadow-1)}
.table-summary{display:flex;flex-wrap:wrap;gap:16px;justify-content:flex-end;align-items:center;
  padding:6px 12px;font-size:12.5px;color:var(--muted);border-bottom:1px solid var(--line-2);
  background:var(--panel)}
.table-summary strong,.table-summary b{color:var(--text);font-weight:650;font-variant-numeric:tabular-nums}
.table-summary .totals-row{display:flex;flex-wrap:wrap;gap:16px;align-items:center}
.table-summary .totals-row>span{white-space:nowrap}
table.data{font-size:12.5px}
table.data th{padding:7px 10px;font-size:11px;letter-spacing:0;text-transform:none;
  background:var(--panel-3);color:#5b6675}
table.data td{padding:7px 10px}
.pager{padding:7px 10px}
.pager .pages button{min-width:27px;height:25px;padding:0 7px;font-size:12px}
.pager .meta{font-size:12px}
.pager select{height:26px;font-size:12.5px}
.empty{padding:26px 16px;font-size:12.5px}
.empty::before{width:34px;height:34px;margin-bottom:8px;border-radius:10px;background-size:16px}
.badge{padding:1px 8px;font-size:11px}

/* ---------- 表单 / 弹窗 ---------- */
label{margin:0 0 9px}
label>span{font-size:12px;margin-bottom:4px}
input,select,textarea{height:32px;font-size:13px}
textarea{min-height:72px}
.form-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:0 12px}
.form-grid textarea{min-height:140px}
.check{margin:0 0 9px;padding:6px 9px}
.hint{font-size:11.5px;margin:4px 0 9px}
label>.hint{margin:4px 0 0}
.btn{height:30px;padding:0 12px;font-size:12.5px}
.btn.sm{height:26px;padding:0 9px;font-size:12px}
.btn.block{height:38px}
.btn-row{gap:7px}
.icon-btn{width:30px;height:30px;font-size:17px}
.modal{max-width:600px}
.modal.wide{max-width:1120px}
.modal.xwide{max-width:1400px}
.modal-head{padding:10px 14px}
.modal-head h3{font-size:14.5px}
.modal-body{padding:12px 14px}
.modal-foot{padding:9px 14px;gap:7px}
.drawer{width:min(720px,96vw)}
.kv{font-size:12.5px;grid-template-columns:132px 1fr}
.kv dt{padding:5px 10px 5px 0}
.kv dd{padding:5px 0}
.settings-tools{padding:8px 10px;margin:0 0 9px;gap:8px}
.fold{margin:0 0 9px}
.fold-head{padding:8px 12px}
.settings-empty{padding:20px}
.quote{padding:10px 12px;font-size:12.5px;margin-bottom:9px}
.odds-grid{gap:8px;grid-template-columns:repeat(auto-fill,minmax(232px,1fr))}
.odds-card{padding:9px 11px 10px}
.ar-grid{gap:8px;grid-template-columns:repeat(auto-fill,minmax(148px,1fr))}
.status-row .val{font-size:12.5px}

/* ---------- 小屏 ---------- */
@media (max-width:900px){
  .view{padding:9px 10px 28px}
  .view>*+*{margin-top:7px}
  .card{padding:9px 10px}
  .topbar{padding:0 10px;height:50px}
  .subtabs{padding:0 10px}
  .crumb-hint{display:none}
  .crumb-root,.crumb-sep{display:none}
  .toolbar{padding:6px 7px}
  .grid{gap:7px}
  .grid.cols-2,.grid.cols-3,.grid.cols-4,.grid.cols-5{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* =====================================================================
   布局2 参考图：深色窄侧栏 + 面包屑 + 同级页签 + 密集面板
   说明：整段位于文件末尾，只做覆盖，不删除任何既有样式，可整段回滚。
   ===================================================================== */
:root{
  --sidebar:#1e2a3a; --sidebar-2:#2b3a4f; --sidebar-line:rgba(255,255,255,.07);
  --sidebar-text:#c6d0de; --sidebar-muted:#8494ab;
  --topbar-h:50px;
  --line:#e8ecf2; --line-2:#eff2f7; --line-3:#dee4ee;
}
/* 参考图的卡片是「白底 + 浅描边 + 无阴影」的平板风：去掉浮起感，压低圆角 */
.card,.kpi,.table-wrap,.toolbar,.settings-tools,.quote{
  border-radius:9px;box-shadow:none;border-color:var(--line)}
.card:hover,.kpi:hover{border-color:#dae2ee;box-shadow:none}
.kpi:hover{transform:none}
/* 侧栏：分组行更矮更轻，选中项＝整条蓝底 */
.nav-group{margin:13px 0 4px;height:22px;color:#7d8ca6}
.nav-group:hover{background:transparent;color:#b9c6da}
.nav-group-caret{width:12px;height:12px;opacity:.6}
.nav a{border-radius:6px}
.nav a.active{background:var(--brand);box-shadow:none}
.brand{padding:12px 14px 11px}
.sidebar-foot{padding:9px 14px}
/* 顶栏一行：☰ + 面包屑 + 账号 */
.topbar{height:50px;background:#fff;padding:0 12px;backdrop-filter:none}
/* 表格：参考图的紧凑行 + 浅色表头 */
table.data th{padding:9px 10px;letter-spacing:0;text-transform:none;background:#f7f9fc;color:#5f6b7c}
table.data td{padding:8px 10px}
.pager{background:#fff}
/* 页面底部不要再留一大片空白 */
.view{padding:9px 11px 14px}
@media (max-width:600px){
  .grid.cols-2,.grid.cols-3,.grid.cols-4,.grid.cols-5{grid-template-columns:1fr}
}
/* =====================================================================
   工具条单行紧凑化（全站统一）：状态筛选 / 导出 / 快捷按钮压成一行
   说明：整段位于文件末尾，只做覆盖，不删除任何既有样式，可整段回滚。
   根因：全局 input,select,textarea{width:100%} 会让工具条里每个筛选控件
        独占整行，工具条被撑成好几行并留下大片空白。
   ===================================================================== */
.toolbar{flex-wrap:nowrap;gap:6px;padding:5px 8px;margin-bottom:7px;
  overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scrollbar-width:thin}
.toolbar-filters{flex-wrap:nowrap;gap:6px;flex:0 1 auto;min-width:0}
.toolbar-actions{flex-wrap:nowrap;gap:6px;flex:0 0 auto;margin-left:auto}
.toolbar input,.toolbar select{width:auto;min-width:0;height:27px;font-size:12px}
.toolbar input[type="date"]{min-width:116px}
.toolbar select{min-width:86px;padding-right:24px;background-position:right 8px center;background-size:11px}
.toolbar input.search{width:auto;min-width:150px;flex:1 1 150px;max-width:300px;height:27px;
  padding-left:27px;background-position:8px center;background-size:13px}
.toolbar .btn{height:27px;padding:0 10px;font-size:12px;white-space:nowrap;flex:0 0 auto}
/* 系统设置 / 分页 / 首页 / 表格汇总同样压成一行 */
.settings-tools{flex-wrap:nowrap;gap:8px;padding:6px 9px;margin-bottom:8px;
  overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scrollbar-width:thin}
.settings-tools .grow{flex:1 1 180px;min-width:130px}
.settings-tools .count{white-space:nowrap}
.pager{flex-wrap:nowrap;gap:8px;padding:7px 10px;overflow-x:auto;overflow-y:hidden}
.dash-bar{flex-wrap:nowrap;gap:8px;margin-bottom:9px;overflow-x:auto;overflow-y:hidden}
.table-summary{flex-wrap:nowrap;gap:14px;padding:5px 11px;overflow-x:auto;overflow-y:hidden}
.table-summary .totals-row{flex-wrap:nowrap;gap:14px;white-space:nowrap}
@media (max-width:600px){
  .toolbar input.search{flex:1 1 120px;min-width:120px}
  .toolbar input[type="date"]{min-width:104px}
}

/* ---------- 详情弹窗：原右侧抽屉改成居中弹窗（可整段回滚） ---------- */
.modal.xwide{max-width:min(1360px,96vw)}
.modal-body{min-height:0}
.modal.xwide .table-wrap{margin-top:2px}
.modal.xwide .section-title{margin:14px 0 8px}
table.data th.pick-col,table.data td.pick-col{width:40px;text-align:center;padding-left:12px;padding-right:4px}
table.data th.pick-col input[type=checkbox],table.data td.pick-col input[type=checkbox]{
  padding:0;margin:0;width:16px;height:16px;vertical-align:-3px}
.modal-foot .btn[disabled]{opacity:.5;cursor:not-allowed}
.modal-foot .muted{font-size:12.5px}
/* 「立即生效 / 下期生效」弹窗里的说明列表 */
.apply-mode-list{margin:10px 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}
.apply-mode-list li{background:var(--panel-2);border:1px solid var(--line-2);border-radius:10px;padding:10px 12px;
  font-size:13px;line-height:1.65}
.apply-mode-list li b{color:var(--brand);margin-right:2px}
.apply-mode-list li span{color:var(--text-2)}

/* =====================================================================
   玩家列表（/players）：一行一人 · 间距紧凑 · 各列对齐
   说明：整段位于文件末尾，只作用于带 .players-table 的表格，
         不改动其它任何表格，可整段删除回滚。
   ===================================================================== */
table.data.players-table{font-size:12.5px}
table.data.players-table th{padding:5px 7px;font-size:11px;white-space:nowrap;
  background:#f7f9fc;color:#5f6b7c}
table.data.players-table td{padding:5px 7px;white-space:nowrap;vertical-align:middle;
  font-variant-numeric:tabular-nums}
/* 用户名过长时省略号，保证一个玩家只占一行 */
table.data.players-table td.cell-name{max-width:112px;overflow:hidden;text-overflow:ellipsis}
/* 未绑定拖号的玩家这一格是空的，不留任何标记 */
table.data.players-table td.cell-drag{color:var(--muted);max-width:84px;
  overflow:hidden;text-overflow:ellipsis}
table.data.players-table td.actions{padding-left:4px;padding-right:8px}
table.data.players-table td.actions .btn.sm{height:23px;padding:0 7px;font-size:11.5px;border-radius:6px}
table.data.players-table td.actions .btn.sm+.btn.sm{margin-left:4px}

/* ---------- 玩家列表：用户名 / 拖号 / 拉手 三列收紧，去掉大片空白 ---------- */
table.data.players-table th:nth-child(3),table.data.players-table td:nth-child(3){max-width:112px}
table.data.players-table th:nth-child(4),table.data.players-table td:nth-child(4){max-width:84px}
table.data.players-table th:nth-child(5),table.data.players-table td:nth-child(5){max-width:112px}
table.data.players-table th:nth-child(3),table.data.players-table td:nth-child(3),
table.data.players-table th:nth-child(4),table.data.players-table td:nth-child(4),
table.data.players-table th:nth-child(5),table.data.players-table td:nth-child(5){
  padding-left:6px;padding-right:6px}
table.data.players-table td:nth-child(3),
table.data.players-table td:nth-child(4),
table.data.players-table td:nth-child(5){overflow:hidden;text-overflow:ellipsis}
table.data.players-table .drag-cell{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- 小弹窗：点开后固定 480 x 480（配 opts.size:"sm" 使用，可整段回滚） ---------- */
.modal.m-sm{width:min(480px,94vw);max-width:480px;height:480px;max-height:min(480px,88vh)}
.modal.m-sm .modal-body{flex:1 1 auto;min-height:0;overflow-y:auto}
.modal.m-sm .form-grid{grid-template-columns:1fr}
