/* Operations surface: paper, ink and a restrained brand-red action system. */
body.admin-open {
  --desk-paper:#fff; --desk-canvas:#f6f7f9; --desk-ink:#252830; --desk-secondary:#626874;
  --desk-line:#e5e7eb; --desk-red:#a82537; --desk-red-soft:#fbf0f2; --desk-gold:#91682a;
  --desk-green:#267155; --desk-amber:#875d16;
  --ink:var(--desk-canvas); --card:var(--desk-paper); --paper:var(--desk-ink); --heading:var(--desk-ink);
  --mute:var(--desk-secondary); --line:var(--desk-line); --line-strong:#b9bec8; --gold:var(--desk-red); --brand:var(--desk-red);
  --win:var(--desk-green); --loss:var(--desk-red); --gold-soft:var(--desk-red-soft);
  max-width:none; margin:0; background:var(--desk-canvas); color:var(--desk-ink); box-shadow:none;
  font-family:'PingFang SC','Microsoft YaHei',-apple-system,sans-serif; font-size:1rem; line-height:1.5;
}
.admin-view>.sub-top { display:none; }
.admin-view>.sub-body { padding:0; }
.admin-workspace { display:grid; grid-template-columns:224px minmax(0,1fr); min-height:100dvh; }
/* 侧栏自己可卷:页签二十几个,笔电高度放不下,以前固定 100dvh 又不许卷,底下的提现 / 风控 / 客服对话点不到 */
.admin-sidebar { position:sticky; top:0; height:100dvh; display:flex; flex-direction:column; padding:20px 12px 16px; border-right:1px solid var(--desk-line); background:var(--desk-canvas); overflow-y:auto; overscroll-behavior:contain; scrollbar-width:thin; }
.admin-brand { display:flex; align-items:center; gap:12px; padding:0 12px 18px; }
.admin-brand-mark { display:grid; place-items:center; width:40px; height:40px; flex:none; border-radius:12px; color:#fff; background:var(--desk-red); border-bottom:3px solid #bd9b60; font-size:22px; font-weight:650; }
.admin-brand b { display:block; font-size:18px; letter-spacing:-.5px; }
.admin-brand small { color:var(--desk-secondary); font-size:12px; letter-spacing:2px; }
.admin-nav-label { display:block; margin:10px 12px 4px; color:var(--desk-secondary); font-size:11px; letter-spacing:.04em; }
.admin-sidebar nav { display:grid; gap:2px; }
.admin-sidebar nav>button { min-height:36px; width:100%; display:flex; align-items:center; gap:10px; padding:7px 12px; border-radius:8px; color:var(--desk-secondary); text-align:left; font-size:14px; line-height:1.2; }
.admin-sidebar nav>button>span:not(.admin-nav-count) { flex:1; }
.admin-sidebar nav>button:hover { background:#ebeef2; color:var(--desk-ink); }
.admin-sidebar nav>button[aria-current=page] { background:#f4e5e8; color:var(--desk-red); font-weight:650; }
.admin-icon { width:20px; height:20px; flex:none; vertical-align:middle; }
.admin-nav-count { min-width:22px; padding:1px 5px; text-align:center; border-radius:5px; color:var(--desk-red); background:#fff; font-size:12px; font-variant-numeric:tabular-nums; }
.admin-sidebar-foot { margin-top:auto; padding:16px 12px 0; display:grid; justify-items:start; gap:7px; }
.admin-sidebar-foot small { font-size:12px; color:var(--desk-secondary); }
.admin-sidebar-foot button { color:var(--desk-secondary); font-size:14px; }
.admin-main { min-width:0; }
.admin-topbar { min-height:72px; padding:16px 36px; border-bottom:1px solid var(--desk-line); background:var(--desk-paper); display:flex; justify-content:space-between; align-items:center; gap:16px; font-size:14px; }
.admin-topbar>div { display:flex; gap:12px; align-items:center; }
.admin-breadcrumb { color:var(--desk-secondary); margin-left:12px; }
.admin-avatar { display:grid; place-items:center; height:32px; width:32px; border-radius:50%; background:#f2f3f5; font-size:13px; }
.admin-session { max-width:160px; overflow-wrap:anywhere; }
.admin-content { max-width:1480px; margin:auto; padding:32px 36px 48px; }
.admin-page-heading { display:flex; justify-content:space-between; align-items:flex-start; gap:20px; margin:0 0 32px; }
.admin-page-heading h1 { font-size:28px; font-weight:650; letter-spacing:-.6px; }
.admin-page-heading p { margin:6px 0 0; color:var(--desk-secondary); font-size:14px; }
.admin-sync { font-size:12px; color:var(--desk-secondary); padding-top:9px; text-align:right; }
.admin-sync.is-error { color:var(--desk-red); }
.admin-section-head { display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:12px; margin:0 0 18px; }
.admin-section-head h2 { font-size:17px; font-weight:650; }
.admin-section-head>span { color:var(--desk-secondary); font-size:12px; }
.admin-task-section { margin-bottom:32px; }
.admin-task-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:20px; }
.admin-task { display:flex; align-items:center; gap:16px; padding:22px; text-align:left; border:1px solid var(--desk-line); border-radius:10px; background:var(--desk-paper); transition:border-color .15s,box-shadow .15s; }
.admin-task:hover { border-color:#c8a1a8; box-shadow:0 2px 8px #25283008; }
.admin-task-symbol { width:44px; height:44px; border-radius:10px; display:grid; place-items:center; color:var(--desk-red); background:var(--desk-red-soft); flex:none; }
.admin-task-symbol.is-gold { color:var(--desk-gold); background:#f8f3e9; }
.admin-task>span:nth-child(2) { flex:1; min-width:0; }
.admin-task b { font-size:16px; font-weight:650; display:block; }
.admin-task small { color:var(--desk-secondary); display:block; font-size:13px; margin-top:5px; }
.admin-task strong { font-size:32px; font-weight:600; font-variant-numeric:tabular-nums; margin:0 6px; }
.admin-task>.admin-icon { color:#8c929d; width:17px; }
.admin-metrics { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); margin-bottom:26px; padding:22px 24px; border:1px solid var(--desk-line); border-radius:10px; background:var(--desk-paper); }
.admin-metrics>div { padding-left:24px; border-left:1px solid var(--desk-line); }
.admin-metrics>div:first-child { padding-left:0; border-left:0; }
.admin-metrics>div>span { display:block; font-size:14px; color:var(--desk-secondary); }
.admin-metrics strong { display:block; margin-top:6px; font-size:30px; font-weight:600; font-variant-numeric:tabular-nums; }
.admin-metrics strong small { font-size:12px; font-weight:400; color:var(--desk-secondary); margin-left:8px; }
.admin-overview-grid { display:grid; grid-template-columns:1.3fr 1fr; gap:24px; }
.admin-card { background:var(--desk-paper); border:1px solid var(--desk-line); border-radius:10px; padding:24px; margin-bottom:24px; min-width:0; }
.admin-link { display:inline-flex; align-items:center; gap:6px; color:var(--desk-red); min-height:40px; font-size:14px; font-weight:500; }
.admin-link .admin-icon { width:16px; height:16px; }
.admin-room-row { display:flex; align-items:center; gap:12px; padding:20px 0; border-top:1px solid var(--desk-line); }
.admin-room-row>div { flex:1; min-width:0; }
.admin-room-row b { display:block; font-size:15px; }
.admin-room-row small { display:block; color:var(--desk-secondary); font-size:13px; margin-top:5px; }
.admin-room-symbol { display:grid; place-items:center; width:38px; height:38px; background:var(--desk-canvas); border-radius:8px; color:var(--desk-secondary); flex:none; }
.admin-status { display:inline-flex; align-items:center; width:fit-content; padding:4px 8px; border-radius:5px; font-size:13px; color:var(--desk-secondary); background:#f1f2f4; white-space:nowrap; }
.admin-status.is-pending { color:var(--desk-amber); background:#faf3e6; }
.admin-status.is-approved { color:var(--desk-green); background:#edf6f0; }
.admin-status.is-rejected { color:var(--desk-red); background:var(--desk-red-soft); }
.admin-money-total { padding:7px 0 22px; border-bottom:1px solid var(--desk-line); }
.admin-money-total>span { display:block; color:var(--desk-secondary); font-size:14px; }
.admin-money-total strong { display:block; margin-top:8px; font-size:30px; font-weight:600; font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }
.admin-account-line { display:flex; justify-content:space-between; gap:12px; margin-top:17px; font-size:14px; }
.admin-account-line>span { color:var(--desk-secondary); }
.admin-account-line b { font-variant-numeric:tabular-nums; font-weight:550; }
.admin-card-foot { font-size:12px; color:var(--desk-secondary); margin:18px 0 0; padding-top:14px; border-top:1px solid var(--desk-line); }
.admin-table-scroll { max-width:100%; overflow-x:auto; overscroll-behavior-x:contain; }
.admin-data-table { border-collapse:collapse; width:100%; text-align:left; font-size:14px; }
.admin-data-table th { padding:13px 16px; background:#f8f9fa; color:var(--desk-secondary); font-weight:500; white-space:nowrap; font-size:13px; }
.admin-data-table td { padding:16px; border-bottom:1px solid var(--desk-line); font-variant-numeric:tabular-nums; }
.admin-data-table tr:last-child td { border-bottom:0; }
.admin-data-table td b { font-weight:550; }
.admin-data-table td small { display:block; color:var(--desk-secondary); font-size:12px; margin-top:4px; }
.admin-data-table tr.is-selected { background:#fdf4f5; }
.admin-empty { text-align:center; padding:36px 16px; color:var(--desk-secondary); font-size:14px; }
.admin-empty b { color:var(--desk-ink); display:block; font-size:15px; font-weight:550; }
.admin-empty p { margin:6px 0 0; font-size:13px; }
.admin-empty-symbol { display:grid; place-items:center; width:44px; height:44px; margin:0 auto 12px; border-radius:50%; background:var(--desk-canvas); }
.admin-lifetime { display:flex; flex-wrap:wrap; gap:12px 24px; color:var(--desk-secondary); font-size:12px; }
.admin-lifetime b { color:var(--desk-ink); font-weight:500; margin-left:6px; font-variant-numeric:tabular-nums; }
.admin-review-summary { display:flex; justify-content:space-between; align-items:center; gap:16px; margin-bottom:16px; }
.admin-review-summary b { font-weight:550; }
.admin-review-summary p { font-size:14px; color:var(--desk-secondary); margin:4px 0 0; }
.admin-button { padding:10px 16px; min-height:44px; border:1px solid #d9dde3; background:var(--desk-paper); border-radius:7px; font-size:14px; font-weight:550; color:var(--desk-ink); white-space:nowrap; }
.admin-button:hover { border-color:#aeb4be; background:#fafbfc; }
.admin-button.is-primary { background:var(--desk-red); border-color:var(--desk-red); color:white; }
.admin-button.is-primary:hover { background:#8d1d2e; }
.admin-button:disabled { opacity:.5; cursor:not-allowed; }
.admin-inline-message { margin:8px 0 16px; font-size:14px; color:var(--desk-red); white-space:pre-wrap; }
.admin-inline-message:empty { display:none; }
.admin-review-layout { display:grid; grid-template-columns:minmax(0,1fr); gap:24px; align-items:start; }
.admin-review-layout:has(.admin-review-detail:not([hidden])) { grid-template-columns:minmax(0,1fr) 340px; }
.admin-review-list { padding:0; overflow:hidden; }
.admin-review-list>.admin-card-foot { margin:0; padding:14px 20px; }
.admin-list-toolbar { display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap; padding:18px 20px; }
.admin-filters { display:flex; gap:4px; flex-wrap:wrap; }
.admin-filters button { padding:8px 12px; color:var(--desk-secondary); min-height:40px; font-size:14px; border-radius:6px; }
.admin-filters button[aria-pressed=true] { color:var(--desk-red); background:var(--desk-red-soft); font-weight:600; }
.admin-filters button span { font-size:12px; margin-left:4px; font-variant-numeric:tabular-nums; }
.admin-search { display:flex; align-items:center; }
.admin-search>span { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); }
.admin-search input { width:230px; max-width:100%; min-height:40px; padding:9px 12px; border:1px solid var(--desk-line); border-radius:6px; font-size:14px; background:#fafbfc; color:var(--desk-ink); }
.admin-person { display:flex; align-items:center; gap:10px; text-align:left; min-width:160px; }
.admin-person-avatar { flex:none; width:34px; height:34px; display:grid; place-items:center; border-radius:8px; background:#f2f3f6; color:var(--desk-secondary); }
.admin-person b { display:block; max-width:230px; overflow-wrap:anywhere; }
.admin-review-detail { position:sticky; top:24px; padding:24px; }
.admin-detail-header { display:flex; align-items:center; justify-content:space-between; margin-top:-8px; }
.admin-kicker { font-size:12px; color:var(--desk-secondary); }
.admin-detail-title { display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin-top:8px; }
.admin-detail-title h2 { font-size:20px; overflow-wrap:anywhere; min-width:0; }
.admin-detail-meta { color:var(--desk-secondary); font-size:12px; margin:8px 0 24px; }
.admin-detail-fields { display:grid; gap:18px; margin:0 0 24px; }
.admin-detail-fields dt { color:var(--desk-secondary); font-size:13px; margin-bottom:4px; }
.admin-detail-fields dd { margin:0; font-size:15px; overflow-wrap:anywhere; }
.admin-field { display:block; font-size:14px; font-weight:550; }
.admin-field>span { font-size:12px; color:var(--desk-red); margin-left:6px; }
.admin-field textarea { display:block; width:100%; margin-top:8px; padding:12px; border:1px solid #d3d7df; border-radius:7px; background:#fafbfc; color:var(--desk-ink); resize:vertical; font:inherit; font-weight:400; line-height:1.6; }
.admin-field-help { color:var(--desk-secondary); font-size:12px; line-height:1.6; margin:8px 0 16px; }
.admin-review-actions { display:flex; gap:10px; }
.admin-review-actions>* { flex:1; }
.admin-review-notice { margin:24px 0 0; padding-top:18px; border-top:1px solid var(--desk-line); font-size:12px; color:var(--desk-secondary); }
.admin-previous-note { padding:14px; background:var(--desk-canvas); border-radius:6px; margin:0 0 20px; font-size:14px; }
.admin-previous-note p { margin:5px 0 0; overflow-wrap:anywhere; white-space:pre-wrap; }
.admin-review-warning { color:var(--desk-red); background:var(--desk-red-soft); font-size:13px; padding:12px; border-radius:6px; }
.admin-confirm { width:min(460px,calc(100% - 32px)); max-height:90dvh; overflow-y:auto; padding:28px; border:1px solid var(--desk-line); border-radius:12px; background:var(--desk-paper); color:var(--desk-ink); box-shadow:0 18px 80px #0002; }
.admin-confirm::backdrop { background:#20263166; }
.admin-confirm h2 { font-size:22px; }
.admin-confirm>p { font-size:14px; overflow-wrap:anywhere; }
/* Extend the same tokens to existing administration pages without touching player UI. */
body.admin-open .panel { border-radius:10px; border-color:var(--desk-line); box-shadow:none; padding:24px; margin-bottom:20px; }
body.admin-open .btn { border-radius:7px; box-shadow:none; min-height:44px; font-size:14px; }
body.admin-open .btn-gold { background:var(--desk-red); border-color:var(--desk-red); color:#fff; }
body.admin-open .btn-ghost { background:#fff; color:var(--desk-ink); border-color:#d7dbe2; }
body.admin-open .btn:disabled { background:#f1f2f4; color:#9297a2; border-color:var(--desk-line); }
body.admin-open .field input,body.admin-open .field select { border-radius:7px; background:#fafbfc; border-color:#d3d7df; font-size:14px; min-height:44px; }
body.admin-open .field span { font-size:14px; }
.room-share-limits { gap:12px; }
.room-share-limits .field { display:flex; flex-direction:column; min-width:0; margin-bottom:0; }
.room-share-limits .field input { margin-top:auto; min-height:44px; font-variant-numeric:tabular-nums; }
.room-share-limit-help { margin:0 0 12px; }
@media(max-width:700px) { .room-share-limits { grid-template-columns:minmax(0,1fr); } }
/* 分享卡片款式:桌面三张缩图一排,手机改成一款一行(缩图在左、勾选和名字在右);整张卡都点得到。
 * 只用黑底柠檬那套 token(跟 .bk-preset 一样:面层再叠一层 + 细线,勾着的描柠檬边),不用开头那套纸白红 ——
 * 那套在黑底面板上会冒出三块白卡;标题跟旁边的 .field 标签同色(--ink-2),--mute 在后台是 #626874 太暗 */
.room-share-styles { min-width:0; margin:0 0 12px; padding:0; border:0; }
.room-share-styles legend { padding:0; margin-bottom:6px; color:var(--ink-2); font-size:14px; }
.room-share-style-list { display:grid; grid-template-columns:repeat(3,minmax(0,168px)); gap:12px; }
.room-share-style { display:flex; flex-direction:column; gap:8px; min-width:0; padding:8px; border:1px solid var(--line); border-radius:10px; background:var(--surface-2); cursor:pointer; }
.room-share-style:has(input:checked) { border-color:var(--neon); box-shadow:inset 0 0 0 1px var(--neon); }
.room-share-style:has(input:focus-visible) { outline:2px solid var(--neon); outline-offset:2px; }
.room-share-style img { display:block; width:100%; height:auto; aspect-ratio:1; object-fit:cover; border-radius:7px; background:#0a0a0a; }
.room-share-style>span { display:flex; align-items:center; gap:8px; min-width:0; min-height:28px; color:var(--ink); font-size:14px; line-height:1.3; }
.room-share-style input { width:18px; height:18px; flex:none; margin:0; accent-color:var(--neon); }
.room-share-styles .hint { margin-top:8px; }
@media(max-width:480px) {
  .room-share-style-list { grid-template-columns:minmax(0,1fr); gap:8px; }
  .room-share-style { flex-direction:row; align-items:center; min-height:44px; }
  .room-share-style img { width:56px; flex:none; }
}
body.admin-open .row .end { font-size:18px; letter-spacing:0; }
.admin-players { max-width:960px; }
.admin-player-search { display:flex; gap:8px; max-width:440px; margin-bottom:16px; }
.admin-player-search>label { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); }
.admin-player-search>input { flex:1; min-width:0; min-height:44px; padding:10px 12px; border:1px solid var(--desk-line); border-radius:7px; background:var(--desk-paper); color:var(--desk-ink); font-size:14px; }
.admin-player-table { border:1px solid var(--desk-line); background:var(--desk-paper); border-radius:10px; }
.admin-player-columns,.admin-player-row { display:grid; grid-template-columns:minmax(0,1fr) 112px 48px 132px 16px; gap:16px; align-items:center; padding:8px 16px; }
.admin-player-columns { min-height:40px; border-bottom:1px solid var(--desk-line); border-radius:10px 10px 0 0; background:var(--desk-canvas); color:var(--desk-secondary); font-size:12px; }
.admin-player-list { margin:0; padding:0; list-style:none; }
.admin-player-list>li+li { border-top:1px solid var(--desk-line); }
.admin-player-row { width:100%; min-height:60px; text-align:left; color:var(--desk-ink); font-size:14px; }
.admin-player-row:hover { background:var(--desk-canvas); }
.admin-player-row:active { background:var(--desk-red-soft); }
body.admin-open .admin-player-row:focus-visible { position:relative; outline-offset:-3px; }
.admin-player-account { display:flex; min-width:0; align-items:center; gap:12px; }
.admin-player-avatar { width:28px; height:28px; display:grid; place-items:center; flex:none; border-radius:7px; background:var(--desk-canvas); color:var(--desk-secondary); font-size:12px; }
.admin-player-identity { min-width:0; }
.admin-player-name { display:flex; min-width:0; align-items:center; gap:8px; }
.admin-player-name>b { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:14px; font-weight:600; }
.admin-player-name>.admin-status { flex:none; font-size:11px; padding:2px 6px; }
.admin-player-uid { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--desk-secondary); font-size:12px; margin-top:2px; }
.admin-player-seen { color:var(--desk-secondary); font-size:12px; white-space:nowrap; font-variant-numeric:tabular-nums; }
.admin-player-rounds { text-align:right; font-variant-numeric:tabular-nums; }
.admin-player-money { text-align:right; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-variant-numeric:tabular-nums; }
.admin-player-row .admin-player-money { font-weight:550; }
.admin-player-chevron { color:var(--desk-secondary); text-align:right; font-size:20px; }
.admin-player-footer { display:flex; flex-wrap:wrap; justify-content:space-between; gap:4px 16px; margin:0; padding:12px 16px; border-top:1px solid var(--desk-line); color:var(--desk-secondary); font-size:12px; }
body.admin-open .avatar { background:#f2f3f5; border:0; color:var(--desk-secondary); }
body.admin-open .panel-head { color:var(--desk-ink); }
body.admin-open .sheet { align-items:center; justify-content:center; padding:16px; }
body.admin-open .sheet-card { max-width:680px; border-radius:12px; border:1px solid var(--desk-line); }
body.admin-open .tng-workbench { max-width:1000px; color:var(--desk-ink); }
body.admin-open .tng-workbench>.tng-title { display:none; }
body.admin-open .tng-note { margin-top:0; border:1px solid #e6dcc5; background:#fbf8f0; border-radius:8px; color:#75602f; }
body.admin-open .tng-card { border:1px solid var(--desk-line); box-shadow:none; border-radius:10px; padding:24px; margin:20px 0; }
body.admin-open .tng-toolbar .btn { flex:none; width:auto; padding-inline:20px; }
body.admin-open .tng-form>.btn { justify-self:start; width:auto; padding-inline:20px; }
body.admin-open .tng-status { border-color:var(--desk-line); background:#f7f8fa; color:var(--desk-secondary); border-radius:5px; }
body.admin-open .tng-workbench input:not([type=checkbox]),body.admin-open .tng-workbench textarea,body.admin-open .tng-workbench select { background:#fafbfc; border-color:#d3d7df; border-radius:7px; }
body.admin-open :is(button,a,input,textarea,select):focus-visible { outline:3px solid #af5463; outline-offset:3px; }
@media(min-width:1400px) { .admin-review-layout:has(.admin-review-detail:not([hidden])) { grid-template-columns:minmax(0,1fr) 380px; } }
@media(max-width:1150px) {
  .admin-workspace { grid-template-columns:200px minmax(0,1fr); }
  .admin-content { padding:28px 24px 40px; }
  .admin-topbar { padding:16px 24px; }
  .admin-task { gap:12px; padding:18px; }
  .admin-task small { font-size:12px; }
  .admin-review-layout:has(.admin-review-detail:not([hidden])) { grid-template-columns:minmax(0,1fr); }
  .admin-review-detail { position:static; }
  .admin-page-heading { flex-wrap:wrap; gap:8px; }
  .admin-sync { text-align:left; }
}
@media(max-width:760px) {
  .admin-workspace { display:block; }
  .admin-sidebar { position:static; height:auto; padding:16px; border-right:0; border-bottom:1px solid var(--desk-line); }
  .admin-brand { padding:0 0 14px; }
  .admin-brand-mark { width:34px; height:34px; font-size:18px; }
  .admin-brand small { display:none; }
  .admin-sidebar .admin-nav-label { display:none; }
  .admin-sidebar nav { display:flex; overflow-x:auto; gap:6px; padding:3px 0 8px; }
  .admin-sidebar nav>button { width:auto; white-space:nowrap; gap:8px; padding:10px 12px; flex:none; }
  .admin-sidebar nav .admin-icon { width:17px; height:17px; }
  .admin-sidebar-foot { position:absolute; right:16px; top:12px; margin:0; padding:0; }
  .admin-sidebar-foot button { font-size:12px; }
  .admin-topbar { min-height:52px; padding:10px 20px; font-size:12px; }
  .admin-topbar>div { gap:8px; }
  .admin-content { padding:24px 16px 36px; }
  .admin-page-heading { margin-bottom:24px; }
  .admin-page-heading h1 { font-size:25px; }
  .admin-page-heading p { font-size:14px; }
  .admin-sync { font-size:12px; }
  .admin-task-grid,.admin-overview-grid { grid-template-columns:1fr; gap:12px; }
  .admin-task-section { margin-bottom:28px; }
  .admin-task { padding:18px; }
  .admin-task strong { font-size:28px; }
  .admin-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); gap:24px 0; padding:20px; }
  .admin-metrics>div:nth-child(3) { border:0; padding-left:0; }
  .admin-card { padding:20px; margin-bottom:18px; }
  .admin-room-row { gap:10px; }
  .admin-status { font-size:12px; }
  .admin-review-summary { align-items:flex-start; }
  .admin-review-summary p { font-size:13px; }
  .admin-review-summary>.admin-button { padding:8px 12px; }
  .admin-review-list { padding:0; }
  .admin-list-toolbar { padding:16px; gap:12px; }
  .admin-filters button { padding:8px 10px; }
  .admin-search,.admin-search input { width:100%; }
  .admin-review-list .admin-data-table { table-layout:fixed; }
  .admin-review-list .admin-data-table :is(th,td):nth-child(2),
  .admin-review-list .admin-data-table :is(th,td):nth-child(4) { display:none; }
  .admin-review-list .admin-data-table :is(th,td) { padding:12px; }
  .admin-review-list .admin-data-table th:first-child { width:52%; }
  .admin-review-list .admin-data-table th:nth-child(3) { width:24%; }
  .admin-review-list .admin-person { min-width:0; }
  .admin-review-list .admin-person-avatar { display:none; }
  .admin-review-list .admin-link { white-space:nowrap; }
  body.admin-open .tng-card,body.admin-open .panel { padding:18px; }
  body.admin-open .tng-toolbar .btn { flex:1; }
}
@media(max-width:600px) {
  .admin-player-columns,.admin-player-row { grid-template-columns:minmax(0,1fr) 126px 12px; gap:8px; padding-inline:12px; }
  .admin-players .admin-player-seen,.admin-players .admin-player-rounds { display:none; }
  .admin-player-account { gap:8px; }
  .admin-player-avatar { display:none; }
  .admin-player-footer { padding:12px; }
}
@media(prefers-reduced-motion:reduce) { .admin-workspace * { transition:none!important; animation:none!important; } }
.admin-dup { color:var(--desk-red); font-weight:600; }

/* 总览 · 活动奖池 */
.admin-kv { display:flex; justify-content:space-between; gap:12px; padding:8px 0; border-bottom:1px solid var(--desk-line, #ece6dc); font-size:13px; }
.admin-kv:last-of-type { border-bottom:0; }
.admin-kv b { font-variant-numeric: tabular-nums; }
.admin-note { color:var(--desk-mute, #7a7168); font-size:12px; margin-top:8px; }

/* 大话骰现场:每秒重画一次的看板,一张桌一块。业务决定(2026-09-24)class 名也改成看不出意思的代号(lx) */
.lx { display:grid; gap:12px; }
.lx-table { border:1px solid var(--desk-line, #ece6dc); border-radius:10px; padding:12px 14px; background:#fff; }
.lx-head { display:flex; align-items:center; flex-wrap:wrap; gap:8px; margin-bottom:10px; }
.lx-head b { font-size:14px; font-variant-numeric:tabular-nums; }
.lx-head small { color:var(--desk-mute, #7a7168); font-size:12px; font-variant-numeric:tabular-nums; }
.lx-tag { padding:3px 7px; border-radius:5px; background:#f1f2f4; color:var(--desk-secondary); font-size:12px; }
.lx-seat { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:7px 0; border-top:1px solid var(--desk-line, #ece6dc); }
.lx-who { display:flex; align-items:center; gap:7px; min-width:0; }
.lx-who b { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:14px; font-weight:550; }
.lx-off { padding:2px 6px; border-radius:4px; background:#f1f2f4; color:var(--desk-mute, #7a7168); font-size:11px; }
.lx-dice { display:flex; gap:5px; flex:none; }
/* 骰面就写数字。后台是拿来看的,不是拿来演的,点子图反而更难一眼比对 */
.lx-die { display:grid; place-items:center; width:26px; height:26px; border-radius:6px; background:#f7f5f1; box-shadow:inset 0 0 0 1px var(--desk-line, #ece6dc); font-style:normal; font-size:14px; font-weight:600; font-variant-numeric:tabular-nums; }
.lx-wait { color:var(--desk-mute, #7a7168); font-size:13px; }

/* 推广分层:没勾「单独设比例」的游戏跟全平台走,把那三格收起来,免得以为填了会生效 */
[data-cgame]:has([data-cf="own"]:not(:checked)) .grid2 { display: none; }

/* 勾选项:theme.css 把 .field 改成 grid,盖掉了 regal.css 的横排,勾选框被套成整格输入框的样子 */
body.admin-open .field.agent-check { display:flex; align-items:center; justify-content:space-between; gap:12px; }
body.admin-open .field.agent-check > span { margin:0; }
body.admin-open .field.agent-check input { flex:none; width:22px; height:22px; min-height:0; padding:0; box-shadow:none !important; accent-color:var(--neon); }
/* 牛牛房间设定:一格一行,左边名称 + 能填多少,右边窄输入框。两栏并排时说明长短不一,输入框会高低错开,手机上看着乱 */
body.admin-open .niu-cfg-sec { margin:18px 0 2px; font-size:13px; font-weight:600; color:var(--ink-2); }
body.admin-open .field.niu-cfg { display:flex; align-items:center; justify-content:space-between; gap:12px; margin:0; padding:8px 0; border-bottom:1px solid var(--desk-line); }
body.admin-open .field.niu-cfg > span { display:grid; gap:2px; margin:0; min-width:0; }
body.admin-open .field.niu-cfg small { font-size:12px; font-weight:400; line-height:1.35; color:var(--ink-2); }
body.admin-open .field.niu-cfg input[type=number] { flex:none; width:112px; }
body.admin-open .field.niu-cfg input[type=checkbox] { flex:none; width:22px; height:22px; min-height:0; padding:0; box-shadow:none !important; accent-color:var(--neon); }
/* 两栏表单:1fr 的最小宽度是内容宽度,date 输入框会把栏撑出卡片;标签折行时让输入框贴底对齐 */
body.admin-open .grid2 { grid-template-columns:minmax(0,1fr) minmax(0,1fr); }
body.admin-open .grid2 > .field, body.admin-open .grid3 > .field { align-content:end; }
body.admin-open .field input, body.admin-open .field select { min-width:0; width:100%; }

/* 手机(99% 管理员用手机,以 iPhone 17 的 402pt 为准):桌面那种一行塞满的排法全部改成折行 */
@media(max-width:760px) {
  body.admin-open .grid2 > .field:last-child:nth-child(odd) { grid-column:1 / -1; }
  body.admin-open .grid3:has(> .field) { grid-template-columns:minmax(0,1fr); gap:0; }
  /* 代理名单:档位、份额、实得比例、两颗按钮原本一行排到 465px,被卡片 overflow:hidden 截掉 */
  body.admin-open .agent-row .body { flex-basis:100%; }
  body.admin-open .agent-row-edit { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; width:100%; margin-left:0; }
  body.admin-open .agent-row-edit select { grid-column:1 / -1; width:100%; min-height:44px; }
  body.admin-open .agent-row-edit :is(select,input) { padding:0 12px; }
  body.admin-open .agent-row-edit input { width:100%; min-height:44px; }
  body.admin-open .agent-row-edit small { align-self:center; text-align:left; }
  body.admin-open .agent-row-edit .btn { width:100%; }
  body.admin-open .row-actions { display:flex; flex-wrap:wrap; gap:8px; }
  body.admin-open .btn-row { flex-wrap:wrap; }
}

/* ---------- 游戏统计(总览 / 小鸡 / 弹珠台共用)----------
 * 手机优先:375px 宽里 16px 边距,四栏共 343px,不横向滚动;320 另外收一档(见文件末)。只用黑底柠檬那套变量
 * (--surface / --surface-2 / --ink-2 / --neon / --bad),不用本文件开头那套纸白红的 --line / --card / --gold。
 */
.gs { margin:0 0 20px; }
.gs[aria-busy=true] { opacity:.6; }
.gs-range { display:flex; gap:6px; margin:0 0 10px; overflow-x:auto; scrollbar-width:none; }
.gs-range::-webkit-scrollbar { display:none; }
.gs-pill { flex:none; min-height:38px; padding:0 14px; border:0; border-radius:var(--r-pill); background:var(--surface-2); color:var(--ink-2); font-size:13px; font-weight:600; white-space:nowrap; }
.gs-pill[aria-pressed=true] { background:var(--neon); color:var(--neon-ink); }
.gs-sum { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; margin:0 0 10px; }
.gs-sum>div { min-width:0; padding:10px 12px; border-radius:var(--r-tile); background:var(--surface); }
.gs-sum span { display:block; font-size:12px; color:var(--ink-2); line-height:1.4; }
.gs-sum b { display:block; margin-top:2px; font-size:clamp(14px,4.4vw,17px); font-weight:700; line-height:1.3; font-variant-numeric:tabular-nums; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:var(--ink); }
.gs-up { color:var(--neon) !important; }
.gs-down { color:var(--bad) !important; }
.gs-table { border-radius:var(--r-tile); background:var(--surface); overflow:hidden; }
/* 局数栏 52px:四位数「2,345」、一万以上缩成「12.3K」、外文表头 Pusingan / จำนวนตา 都放得下 */
.gs-head,.gs-row>summary,.gs-total { display:grid; grid-template-columns:minmax(0,1fr) 52px 76px 80px; gap:4px; align-items:center; padding:10px 12px; font-size:13px; }
.gs-row>summary { min-height:44px; }
.gs-head { padding-block:8px; font-size:12px; line-height:1.2; color:var(--ink-2); background:var(--surface-2); }
/* 表头允许折成两行,外文长词不截 */
.gs-head>:not(:first-child) { white-space:normal !important; overflow-wrap:anywhere; text-overflow:clip !important; }
.gs-head>:not(:first-child),.gs-row>summary>:not(:first-child),.gs-total>:not(:first-child) { text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.gs-row { box-shadow:inset 0 1px 0 rgba(255,255,255,.07); }
.gs-row>summary { list-style:none; cursor:pointer; color:var(--ink); }
.gs-row>summary::-webkit-details-marker { display:none; }
.gs-row[open]>summary { background:var(--surface-2); }
.gs-name { min-width:0; display:flex; flex-direction:column; align-items:flex-start; }
.gs-name-line { display:flex; align-items:center; max-width:100%; min-width:0; }
.gs-name b { min-width:0; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* 展开箭头挂在名字外面(flex:none),名字被截也看得到这一行能点 */
.gs-row>summary .gs-name-line::after { content:'›'; flex:none; margin-left:4px; color:var(--ink-2); transition:transform .15s; }
.gs-row[open]>summary .gs-name-line::after { transform:rotate(90deg); }
/* 已关闭:只让数字变淡,标签本身是清楚的红色小胶囊 */
.gs-name i { margin-top:2px; padding:0 6px; border-radius:var(--r-pill); font-style:normal; font-size:11px; font-weight:600; line-height:18px; color:var(--bad); background:rgba(255,255,255,.06); white-space:nowrap; }
.gs-row.is-off>summary>:not(.gs-name),.gs-row.is-off .gs-name b { opacity:.55; }
.gs-total { box-shadow:inset 0 1px 0 rgba(255,255,255,.14); font-weight:700; color:var(--ink); }
/* 明细:金额一律完整显示(flex:none 不截),要截只截左边的标签 */
.gs-more { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:6px 16px; margin:0; padding:8px 12px 12px; font-size:12px; background:var(--surface-2); }
.gs-more>div { display:flex; justify-content:space-between; align-items:baseline; gap:8px; min-width:0; }
.gs-more dt { min-width:0; color:var(--ink-2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.gs-more dd { flex:none; margin:0; color:var(--ink); font-variant-numeric:tabular-nums; white-space:nowrap; }
.gs-flows { margin-top:8px; border-radius:var(--r-tile); background:var(--surface); overflow:hidden; }
.gs-flows>summary { list-style:none; cursor:pointer; padding:10px 12px; font-size:13px; color:var(--ink-2); }
.gs-flows>summary::-webkit-details-marker { display:none; }
.gs-flows>summary::after { content:' ›'; }
.gs-flows[open]>summary::after { content:' ‹'; }
.gs-hint { margin:8px 2px 0; font-size:12px; line-height:1.5; color:var(--ink-2); }
/* 自订期间:两个日期 + 查询,手机上一行放不下就折行 */
.gs-custom { display:flex; flex-wrap:wrap; gap:8px; align-items:flex-end; margin:0 0 10px; }
.gs-custom label { display:flex; flex-direction:column; gap:2px; flex:1 1 130px; font-size:12px; color:var(--ink-2); }
.gs-custom input { min-height:38px; padding:0 8px; border:1px solid var(--surface-2); border-radius:8px; background:var(--surface); color:inherit; font:inherit; }
/* 每日趋势:日期 + 四个数,窄屏也排得下 */
.gs-trend { margin-top:12px; border-radius:var(--r-tile); background:var(--surface); overflow:hidden; }
.gs-trend-title { padding:10px 12px 4px; font-size:13px; font-weight:700; }
.gs-trend-row { display:grid; grid-template-columns:44px repeat(4,minmax(0,1fr)); gap:4px; padding:8px 12px; font-size:12px; font-variant-numeric:tabular-nums; }
.gs-trend-row>:not(:first-child) { text-align:right; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.gs-trend-row+.gs-trend-row { border-top:1px solid var(--surface-2); }
.gs-trend-head { color:var(--ink-2); background:var(--surface-2); }
/* 陪打号页(2026-11-02):各陪打号一行(名字比日期长,第一栏放宽)、各游戏一行 */
.hp-row,.hp-game-row { display:grid; gap:4px; padding:8px 12px; font-size:12px; font-variant-numeric:tabular-nums; }
.hp-row { grid-template-columns:minmax(0,1.4fr) repeat(4,minmax(0,1fr)); }
.hp-game-row { grid-template-columns:minmax(0,1.4fr) minmax(0,.8fr) minmax(0,1.2fr); }
.hp-row>*,.hp-game-row>* { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.hp-row>:not(:first-child),.hp-game-row>:not(:first-child) { text-align:right; }
.hp-row+.hp-row,.hp-game-row+.hp-game-row { border-top:1px solid var(--surface-2); }
.hp-who { display:flex; align-items:center; gap:8px; margin-top:10px; font-size:13px; }
.hp-who select { flex:1; min-width:0; min-height:38px; padding:0 8px; border:1px solid var(--surface-2); border-radius:8px; background:var(--surface); color:inherit; font:inherit; }
/* 分页条:每页 10 笔,按钮够大,单手拇指点得到 */
.admin-pager { display:flex; align-items:center; justify-content:center; gap:12px; margin:10px 0 4px; }
.admin-pager button { min-height:44px; min-width:88px; padding:0 14px; border:0; border-radius:var(--r-pill); background:var(--surface-2); color:inherit; font:inherit; font-weight:600; }
.admin-pager button:disabled { opacity:.4; }
.admin-pager span { min-width:64px; text-align:center; font-variant-numeric:tabular-nums; color:var(--ink-2); }
.gs-flows-hint { margin:0; padding:0 12px 12px; background:var(--surface-2); }
.gs-off-note { margin:0 0 8px; font-size:12px; color:var(--ink-2); }
/* 最近完成的牌局:两行一条,不用表格,手机上不会截断 */
.admin-round-list { margin:0; padding:0; list-style:none; }
.admin-round-list>li { padding:9px 0; box-shadow:inset 0 1px 0 rgba(255,255,255,.07); }
.admin-round-list>li:first-child { box-shadow:none; padding-top:0; }
.admin-round-top { display:flex; align-items:baseline; gap:6px; min-width:0; font-size:13px; }
.admin-round-top b { flex:none; font-weight:600; }
.admin-round-top>span { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--ink-2); }
.admin-round-top strong { flex:none; font-weight:600; font-variant-numeric:tabular-nums; }
.admin-round-list small { display:flex; flex-wrap:wrap; gap:0 6px; margin-top:2px; font-size:12px; color:var(--ink-2); }
.admin-round-list small>span+span::before { content:'·'; margin-right:6px; }
.admin-round-list small i { font-style:normal; font-variant-numeric:tabular-nums; }
.admin-round-more>summary { list-style:none; cursor:pointer; min-height:40px; display:flex; align-items:center; justify-content:center; margin-top:4px; border-radius:var(--r-tile); font-size:13px; color:var(--neon); background:var(--surface-2); }
.admin-round-more>summary::-webkit-details-marker { display:none; }
.admin-round-more[open]>summary { display:none; }
.admin-round-more>.admin-round-list>li:first-child { box-shadow:inset 0 1px 0 rgba(255,255,255,.07); padding-top:9px; }

/* 实时动态:一个游戏一行,名字一栏至少 76px(外语名长了折行),右边是「数字 + 固定词」,挤不下就换行,不横向溢出 */
.lv-list { margin:0; padding:0; list-style:none; }
.lv-row { display:flex; align-items:baseline; gap:10px; min-width:0; padding:9px 0; font-size:13px; line-height:1.45; box-shadow:inset 0 1px 0 rgba(255,255,255,.07); }
.lv-row:first-child { box-shadow:none; padding-top:0; }
/* 名字列至少 76px 对齐,外语名长了就折行,最多占四成宽,不截断 */
.lv-name { flex:0 0 auto; min-width:76px; max-width:42%; font-weight:600; color:var(--ink); overflow-wrap:break-word; }
.lv-facts { flex:1; min-width:0; display:flex; flex-wrap:wrap; gap:2px 12px; color:var(--ink-2); }
.lv-fact { white-space:nowrap; }
.lv-fact b { font-weight:600; color:var(--ink); font-variant-numeric:tabular-nums; }
.lv-fact.is-zero b { color:var(--ink-2); font-weight:500; }
.lv-span { color:var(--ink-2); }
.lv-note { flex:1; min-width:0; font-size:12px; color:var(--ink-2); }
.lv-row.is-off .lv-name { opacity:.5; }
.lv-row.is-off .lv-note { opacity:.8; }
.lv-row.is-warn .lv-note { color:var(--bad); }
/* 已暂停:跟游戏统计里「已关闭」同一种小胶囊,数字照样列在后面 */
.lv-paused { align-self:center; padding:0 6px; border-radius:var(--r-pill); font-size:11px; font-weight:600; line-height:18px; color:var(--bad); background:rgba(255,255,255,.06); }
.lv-row.is-idle .lv-name { color:var(--ink-2); }
/* 牛牛那一行可以展开看每个房间 */
.lv-classic { display:block; }
.lv-classic>details>summary { display:flex; align-items:baseline; gap:10px; min-width:0; list-style:none; cursor:pointer; }
.lv-classic>details>summary::-webkit-details-marker { display:none; }
.lv-classic .lv-name::after { content:'›'; display:inline-block; margin-left:4px; color:var(--ink-2); transition:transform .15s; }
.lv-classic>details[open] .lv-name::after { transform:rotate(90deg); }
.lv-rooms { margin-top:8px; padding:2px 10px 8px; border-radius:var(--r-tile); background:var(--surface-2); }
.lv-room { display:grid; grid-template-columns:minmax(0,1fr) auto auto; align-items:center; gap:8px; padding:7px 0; box-shadow:inset 0 1px 0 rgba(255,255,255,.07); }
.lv-room:first-child { box-shadow:none; }
.lv-room b { min-width:0; font-weight:600; font-size:13px; color:var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.lv-room small { font-size:12px; color:var(--ink-2); white-space:nowrap; }
.lv-room .admin-status { font-size:11px; white-space:nowrap; }
.lv-rooms>.admin-empty { margin:6px 0; font-size:12px; }
.lv-foot { margin:6px 0 0; font-size:12px; line-height:1.5; color:var(--ink-2); }
/* 最近记录:游戏标签是小胶囊,庄家两个字淡一点 */
.admin-round-top .ra-tag { flex:none; padding:0 6px; border-radius:var(--r-pill); background:var(--surface-2); font-size:12px; font-weight:600; line-height:18px; color:var(--ink); white-space:nowrap; }
.ra-who em { font-style:normal; font-size:12px; color:var(--ink-2); opacity:.8; }

/* 手机:整体小一级、留白收紧 */
@media(max-width:760px) {
  .admin-content { padding:14px 16px 28px; }
  .admin-page-heading { margin-bottom:14px; }
  .admin-page-heading h1 { font-size:20px; }
  .admin-page-heading p { font-size:12px; margin-top:2px; }
  .admin-section-head { margin-bottom:8px; gap:8px; }
  .admin-section-head h2 { font-size:15px; }
  .admin-task-section { margin-bottom:18px; }
  .admin-task-grid { gap:8px; }
  .admin-task { padding:12px 14px; gap:10px; }
  .admin-task-symbol { width:36px; height:36px; }
  .admin-task b { font-size:14px; }
  .admin-task small { margin-top:2px; }
  .admin-task strong { font-size:22px; }
  .admin-metrics { grid-template-columns:repeat(4,minmax(0,1fr)); gap:0; padding:10px 4px; margin-bottom:18px; border-radius:var(--r-tile); }
  .admin-metrics>div,.admin-metrics>div:nth-child(3) { padding:0 8px; border-left:1px solid rgba(255,255,255,.08); }
  .admin-metrics>div:first-child { border-left:0; }
  .admin-metrics>div>span { font-size:11px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .admin-metrics strong { margin-top:2px; font-size:18px; line-height:1.3; }
  .admin-metrics strong small { display:none; }
  .admin-card { padding:14px; margin-bottom:12px; border-radius:var(--r-tile); }
  .admin-room-row { padding:10px 0; }
  .admin-room-symbol { width:32px; height:32px; }
  .admin-room-row b { font-size:14px; }
  .admin-room-row small { font-size:12px; margin-top:1px; }
  .admin-card-foot { margin-top:10px; padding-top:10px; }
  .admin-data-table td { padding:10px 8px; font-size:13px; }
  .admin-data-table th { padding:8px; }
  .admin-lifetime { gap:6px 14px; }
  body.admin-open .panel { padding:14px; margin-bottom:12px; }
  /* 明细改单栏:每行左标签右金额,标签再长也挤不掉金额 */
  .gs-more { grid-template-columns:1fr; gap:6px; }
}
/* 320 这种小屏:字小一号、栏收窄,名字栏还留 70px 以上 */
@media(max-width:359px) {
  .gs-head,.gs-row>summary,.gs-total { grid-template-columns:minmax(0,1fr) 50px 68px 72px; gap:3px; padding-inline:10px; font-size:12px; }
  .gs-head { font-size:11px; }
  .gs-pill { padding:0 12px; }
}
/* 平板(761–1024):总览改单栏,大数字收到 22px,别跟游戏统计的 17px 差太多 */
@media(max-width:1024px) {
  .admin-overview-grid { grid-template-columns:1fr; gap:12px; }
}
@media(min-width:761px) and (max-width:1024px) {
  .admin-page-heading h1 { font-size:22px; }
  .admin-metrics { padding:14px 18px; }
  .admin-metrics strong { font-size:22px; }
  .admin-task strong { font-size:24px; }
}

/* 黑底修正:本文件开头那套纸白红变量还留着给老页面用,但后台早就整片黑底了——
 * 细线是 #e5e7eb 会变成一圈白框,链接是红的;theme.css 那条 .sub-body 的 !important 内边距
 * 又盖掉了上面的 padding:0,手机上左右各多出 16px。这里统一改回黑底柠檬。 */
body.admin-open { --line:#242424; --desk-line:#242424; --line-strong:#2e2e2e; }
body.admin-open .admin-view>.sub-body { padding:0 0 var(--safe-b, 0px) !important; }
.admin-link { color:var(--neon); }
body.admin-open .admin-sidebar nav>button[aria-current=page] { background:var(--neon); color:var(--neon-ink); }
body.admin-open .admin-sidebar nav>button[aria-current=page] .admin-icon { background:none !important; color:inherit !important; }
.admin-task-grid>.admin-empty { padding:14px 12px; font-size:13px; }
/* 纸白主题的 --desk-ink / --desk-secondary 在黑底上几乎看不见:累计那一行、指标标签改用黑底的 ink */
body.admin-open .admin-lifetime { color:var(--ink-2); }
body.admin-open .admin-lifetime b { color:var(--ink); }
body.admin-open .admin-metrics>div>span { color:var(--ink-2); }

/* 游戏页子页签(现场 / 数据 / 设定):比期间药丸大一号、底下一条线,两排药丸才分得出是不同层级 */
.admin-subtabs { margin:0 0 14px; padding-bottom:10px; border-bottom:1px solid var(--surface-2); }
.admin-subtabs .gs-pill { min-height:44px; padding:0 20px; font-size:15px; }

/* 首页找玩家:整条宽、输入框够大,手机上单手打得了字 */
.admin-home-search { margin:0 0 16px; }
.admin-home-search label { display:block; margin:0 0 6px; font-size:15px; font-weight:700; }
.admin-home-search>div { display:flex; gap:8px; }
.admin-home-search input { flex:1; min-width:0; min-height:48px; padding:0 14px; border:1px solid var(--surface-2); border-radius:12px; background:var(--surface); color:inherit; font:inherit; font-size:16px; }
.admin-home-search .admin-button { min-height:48px; padding:0 18px; }

/* 风控事件:文字在上、按钮在下,按钮多到一行放不下就换行;备注框撑满剩下的宽度 */
.row.risk-case { flex-direction:column; align-items:stretch; gap:0; }
.row.risk-case .body { width:100%; }
.row.risk-case .body b, .row.risk-case .body small { white-space:normal; overflow-wrap:anywhere; }
.row.risk-case .btn-row { flex-wrap:wrap; }
.row.risk-case .btn-row .btn { flex:0 0 auto; }
.row.risk-case .btn-row input { flex:1 1 140px; min-width:0; }

/* 客服对话 / 客服问答(2026-10-04)。全部用 theme.css 的 token(--surface / --line / --ink / --neon):
   admin-open 把 --card 映成白纸是旧版浅色后台留下的,现在后台跟玩家端一样是黑底,用它就白底白字。 */
.sd-wrap { display:grid; grid-template-columns:300px minmax(0,1fr) 300px; gap:16px; align-items:stretch; height:calc(100vh - 220px); min-height:560px; }
@media (max-width:1180px) { .sd-wrap { grid-template-columns:260px minmax(0,1fr); height:auto; } .sd-side { grid-column:1 / -1; display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:12px; } }
@media (max-width:720px) { .sd-wrap { grid-template-columns:1fr; } .sd-thread { min-height:70vh; } }
.sd-list { display:flex; flex-direction:column; gap:10px; min-height:0; }
.sd-chips { flex:none; }
.sd-rows { display:flex; flex-direction:column; gap:8px; overflow:auto; min-height:0; padding-right:2px; }
.sd-row { position:relative; display:flex; gap:12px; align-items:flex-start; width:100%; text-align:left; padding:12px 14px; border:0; border-radius:var(--r-tile); background:var(--surface); color:var(--ink); box-shadow:inset 0 0 0 1px var(--line); cursor:pointer; font:inherit; }
.sd-row:hover { background:var(--surface-2); }
.sd-row.is-on { box-shadow:inset 0 0 0 1px var(--neon); }
.sd-row.is-on::before { content:''; position:absolute; left:0; top:12px; bottom:12px; width:3px; border-radius:3px; background:var(--neon); }
.sd-row-body { display:grid; gap:3px; min-width:0; flex:1; }
.sd-row-top { display:flex; align-items:center; gap:8px; min-width:0; }
.sd-row-top b { font-size:15px; font-weight:700; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sd-row small { font-size:12px; color:var(--ink-2); }
.sd-row .sd-last { color:var(--ink); opacity:.8; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sd-avatar { flex:none; width:36px; height:36px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; background:var(--surface-2); color:var(--ink); font-weight:700; font-size:15px; box-shadow:inset 0 0 0 1px var(--line); }
.sd-avatar.is-lg { width:44px; height:44px; font-size:18px; }
.sd-badge { display:inline-flex; align-items:center; padding:2px 8px; border-radius:var(--r-pill); font-size:11px; font-weight:700; background:var(--surface-2); color:var(--ink-2); box-shadow:inset 0 0 0 1px var(--line); white-space:nowrap; }
.sd-badge.is-wait { background:var(--neon); color:var(--neon-ink); box-shadow:none; }
.sd-badge.is-agent, .sd-pill.is-agent { color:var(--ink); box-shadow:inset 0 0 0 1px var(--neon); }
.sd-pill { display:inline-flex; gap:4px; padding:3px 10px; border-radius:var(--r-pill); font-size:12px; color:var(--ink-2); background:var(--surface-2); font-variant-numeric:tabular-nums; }
.sd-warn { margin:0 0 4px; font-size:12px; color:var(--neon); opacity:.9; }
.sd-empty { padding:24px 12px; text-align:center; font-size:13px; color:var(--ink-2); }
.sd-empty-tall { margin:auto; }
.sd-hint { margin:4px 0 0; font-size:12px; color:var(--ink-2); line-height:1.5; }
.sd-bad { color:var(--bad); }
.sd-thread { display:flex; flex-direction:column; min-height:0; border-radius:var(--r-card); background:var(--surface); box-shadow:inset 0 0 0 1px var(--line); overflow:hidden; }
.sd-head { display:flex; align-items:center; gap:14px; padding:14px 18px; border-bottom:1px solid var(--line); flex-wrap:wrap; }
.sd-head-body { display:grid; gap:6px; min-width:0; flex:1; }
.sd-head-body b { font-size:17px; font-weight:700; }
.sd-head-meta { display:flex; gap:6px; flex-wrap:wrap; }
.sd-head-actions { display:flex; gap:8px; flex-wrap:wrap; }
.sd-msgs { flex:1; min-height:0; overflow:auto; padding:18px; display:flex; flex-direction:column; gap:14px; background:var(--bg); }
.sd-msg { display:flex; flex-direction:column; gap:4px; max-width:72%; }
.sd-msg small { font-size:11px; color:var(--ink-3); padding:0 4px; }
.sd-bubble { padding:10px 14px; border-radius:16px; background:var(--surface-2); color:var(--ink); box-shadow:inset 0 0 0 1px var(--line); }
.sd-bubble p { margin:0; white-space:pre-wrap; word-break:break-word; font-size:14px; line-height:1.55; }
.sd-msg.is-player { align-self:flex-start; }
.sd-msg.is-player .sd-bubble { border-bottom-left-radius:6px; }
.sd-msg.is-bot { align-self:flex-start; max-width:64%; }
.sd-msg.is-bot .sd-bubble { background:transparent; color:var(--ink-2); box-shadow:none; border:1px dashed var(--line); border-bottom-left-radius:6px; }
.sd-msg.is-bot .sd-bubble p { font-size:13px; }
.sd-msg.is-agent { align-self:flex-end; align-items:flex-end; }
.sd-msg.is-agent .sd-bubble { background:rgba(229,255,61,.12); box-shadow:inset 0 0 0 1px rgba(229,255,61,.55); border-bottom-right-radius:6px; }
.sd-img { display:block; max-width:280px; max-height:280px; border-radius:10px; margin:2px 0 6px; }
.sd-img-missing { color:var(--ink-3); font-size:12px; }
.sd-compose { padding:14px 18px 12px; border-top:1px solid var(--line); display:flex; flex-direction:column; gap:10px; background:var(--surface); }
.sd-input { width:100%; min-width:0; box-sizing:border-box; min-height:40px; padding:8px 14px; border:0; border-radius:var(--r-tile); background:var(--surface-2); color:var(--ink); font:inherit; font-size:14px; box-shadow:inset 0 0 0 1px var(--line); color-scheme:dark; }
.sd-input::placeholder { color:var(--ink-3); }
.sd-input:focus { outline:0; box-shadow:inset 0 0 0 1px var(--neon); }
.sd-textarea { min-height:84px; padding:10px 14px; line-height:1.5; resize:vertical; }
.sd-select { appearance:auto; }
.sd-compose-bar { display:flex; align-items:center; gap:10px; }
.sd-compose-bar .btn-n { margin-left:auto; min-width:96px; }
.sd-tools { display:flex; gap:4px; }
.sd-icon-btn { display:inline-flex; align-items:center; justify-content:center; width:36px; height:36px; border:0; border-radius:10px; background:transparent; color:var(--ink-2); cursor:pointer; }
.sd-icon-btn:hover { background:var(--surface-2); color:var(--ink); }
.sd-attach { display:flex; align-items:center; gap:10px; padding:6px 8px; border-radius:var(--r-tile); background:var(--surface-2); box-shadow:inset 0 0 0 1px var(--line); }
.sd-attach img { width:48px; height:48px; object-fit:cover; border-radius:8px; }
.sd-attach span { flex:1; min-width:0; font-size:12px; color:var(--ink-2); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sd-modal { position:fixed; inset:0; z-index:60; display:flex; align-items:center; justify-content:center; padding:16px; background:rgba(0,0,0,.6); }
.sd-modal-card { width:min(720px,100%); max-height:min(80vh,720px); display:flex; flex-direction:column; gap:12px; padding:18px 20px; border-radius:var(--r-card); background:var(--surface); box-shadow:inset 0 0 0 1px var(--line), 0 24px 60px rgba(0,0,0,.5); }
.sd-modal-head { display:flex; align-items:center; justify-content:space-between; }
.sd-modal-head h3 { margin:0; font-size:17px; }
/* 不能用 grid:列里的预览段落 overflow:hidden 让轨道的最小高度变 0,容器一有固定高度所有列就被压扁塞进去 */
.sd-pick-list { flex:1; min-height:160px; overflow-y:scroll; display:flex; flex-direction:column; gap:8px; padding-right:4px; }
.sd-pick-row { flex:none; }
.sd-pick-row { display:grid; gap:4px; width:100%; text-align:left; padding:10px 12px; border:0; border-radius:var(--r-tile); background:var(--surface-2); color:var(--ink); box-shadow:inset 0 0 0 1px var(--line); cursor:pointer; font:inherit; }
.sd-pick-row.is-on { box-shadow:inset 0 0 0 2px var(--neon); }
.sd-pick-head { display:flex; align-items:center; gap:8px; }
.sd-pick-head b { font-size:14px; }
.sd-pick-head small { font-size:12px; color:var(--ink-2); }
.sd-pick-img { font-style:normal; }
.sd-pick-actions { margin-left:auto; display:flex; gap:2px; opacity:.55; }
.sd-pick-row:hover .sd-pick-actions, .sd-pick-row.is-on .sd-pick-actions { opacity:1; }
.sd-pick-actions .sd-icon-btn { width:28px; height:28px; }
.sd-tpl-form { display:grid; gap:4px; }
.sd-tpl-form .field input, .sd-tpl-form .field textarea { font-weight:400; }
.sd-pick-row p { margin:0; font-size:13px; line-height:1.5; max-height:3em; color:var(--ink-2); display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
/* 这几个区块各自卷动,macOS 的浮动卷轴不滚就看不见,会以为卷不动:卷轴改成常驻、细一条 */
.sd-pick-list, .sd-msgs, .sd-rows, .sd-side, .admin-sidebar { scrollbar-width:thin; scrollbar-color:var(--ink-3, #5c5c5c) transparent; scrollbar-gutter:stable; }
.sd-pick-list::-webkit-scrollbar, .sd-msgs::-webkit-scrollbar, .sd-rows::-webkit-scrollbar, .sd-side::-webkit-scrollbar, .admin-sidebar::-webkit-scrollbar { width:8px; }
.sd-pick-list::-webkit-scrollbar-thumb, .sd-msgs::-webkit-scrollbar-thumb, .sd-rows::-webkit-scrollbar-thumb, .sd-side::-webkit-scrollbar-thumb, .admin-sidebar::-webkit-scrollbar-thumb { background:var(--ink-3, #5c5c5c); border-radius:8px; }
.sd-pick-list::-webkit-scrollbar-track, .sd-msgs::-webkit-scrollbar-track, .sd-rows::-webkit-scrollbar-track, .sd-side::-webkit-scrollbar-track, .admin-sidebar::-webkit-scrollbar-track { background:transparent; }
.sd-modal-foot { display:flex; gap:8px; align-items:center; }
.sd-side { display:flex; flex-direction:column; gap:12px; overflow:auto; min-height:0; }
.sd-panel { border-radius:var(--r-tile); background:var(--surface); box-shadow:inset 0 0 0 1px var(--line); padding:14px 16px; }
.sd-panel h3 { margin:0 0 8px; font-size:12px; font-weight:600; letter-spacing:.04em; color:var(--ink-2); }
.sd-panel-head { display:flex; align-items:center; justify-content:space-between; gap:8px; }
.sd-head-btn { border:1px solid var(--line); border-radius:6px; background:transparent; color:var(--ink-2); font:inherit; font-size:11px; letter-spacing:0; padding:2px 8px; cursor:pointer; }
.sd-head-btn:hover { background:var(--surface-2); color:var(--ink); }
.sd-kv { display:flex; justify-content:space-between; gap:12px; padding:7px 0; border-top:1px solid var(--line); font-size:13px; }
.sd-kv:first-of-type { border-top:0; }
.sd-kv span { color:var(--ink-2); }
.sd-kv b { font-weight:600; color:var(--ink); text-align:right; font-variant-numeric:tabular-nums; }
.sd-kv b i { display:block; font-style:normal; font-size:11px; color:var(--ink-3); font-weight:400; }
.sd-line { padding:7px 0; border-top:1px solid var(--line); font-size:13px; }
.sd-line:first-of-type { border-top:0; }
.sd-line b { display:block; font-weight:600; color:var(--ink); }
.sd-line small { display:block; margin-top:2px; font-size:11px; color:var(--ink-3); overflow-wrap:anywhere; }
.sd-line.is-split { display:flex; justify-content:space-between; gap:10px; align-items:flex-start; }
.sd-line.is-split > div { min-width:0; }
.sd-line.is-split > span { flex:none; font-weight:600; font-variant-numeric:tabular-nums; }
.sd-good { color:var(--ink); }
.sd-line.has-copy { position:relative; padding-right:34px; }
.sd-copy { position:absolute; right:0; top:6px; display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; border:0; border-radius:8px; background:transparent; color:var(--ink-3); cursor:pointer; }
.sd-copy:hover { background:var(--surface-2); color:var(--ink); }
.sd-pre { min-height:320px; font-family:ui-monospace, SFMono-Regular, Menlo, monospace; font-size:12px; line-height:1.5; white-space:pre; overflow:auto; resize:vertical; }
.sd-none { margin:4px 0 0; font-size:12px; color:var(--ink-3); }
.sd-none-inline { color:var(--ink-3); font-weight:400; }
.sd-section { display:flex; align-items:baseline; justify-content:space-between; margin:20px 0 6px; }
.sd-section h2 { margin:0; font-size:16px; }
.sd-section small { color:var(--ink-2); font-size:12px; }
.sd-card { border-radius:var(--r-tile); background:var(--surface-2); box-shadow:inset 0 0 0 1px var(--line); padding:12px 14px; margin:10px 0; }
.sd-card-actions { display:flex; gap:8px; align-items:center; margin-top:8px; flex-wrap:wrap; }
.sd-grow { flex:1; }
.sd-check { display:flex; gap:6px; align-items:center; font-size:13px; white-space:nowrap; color:var(--ink-2); }
.sd-check-tall { align-self:end; padding-bottom:14px; }
.sd-topic-card { margin:12px 0; }
.sd-answers { margin-top:8px; }
.sd-chips .chip { flex:none; }

/* 代理名单按线看:一条线一张卡,标题整列可点开合 */
.agent-line-chips { flex-wrap:wrap; margin-bottom:10px; }
.agent-line-filter { margin-bottom:6px; }
.agent-line { border:1px solid var(--line); border-radius:14px; margin:10px 0; overflow:hidden; background:var(--card-2); }
.agent-line-head { display:flex; align-items:center; gap:10px; width:100%; padding:12px 14px; background:none; border:0; color:inherit; font:inherit; text-align:left; cursor:pointer; }
.agent-line-head .body { flex:1; min-width:0; }
.agent-line-head small { display:block; color:var(--mute); margin-top:2px; }
.agent-line-caret { color:var(--mute); font-size:18px; transition:transform .15s; }
.agent-line.open .agent-line-caret { transform:rotate(90deg); }
.agent-line-stats { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; padding:0 14px 12px; }
.agent-line-stat { display:flex; flex-direction:column; gap:2px; min-width:0; }
.agent-line-stat span { font-size:12px; color:var(--mute); }
.agent-line-stat b { font-size:14px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.agent-line-body { border-top:1px solid var(--line); padding-top:10px; }
.agent-line-body > .agent-line-stats { padding-top:0; }
.agent-line-body > .hint, .agent-line-body > .empty { padding:0 14px 12px; }
.agent-line-name { cursor:pointer; text-decoration:underline; text-decoration-color:var(--line-strong); text-underline-offset:3px; }
@media(prefers-reduced-motion:reduce) { .agent-line-caret { transition:none; } }
/* 线的切换按钮在手机上不要被 .btn-row 撑成一整列 */
body.admin-open .agent-line-chips > button { flex:0 0 auto; width:auto; min-width:0; padding:6px 12px; border-radius:999px; }

/* 游戏总开关(admin-secure.js):一个游戏一张卡,上面名字 + 状态小胶囊,中间关闭 / 内测 / 开放三段按钮,下面是还有多少钱在玩、上线前检查 */
.gl-intro { margin-bottom:12px; line-height:1.55; }
.gl-head { display:flex; align-items:center; flex-wrap:wrap; gap:8px; margin-bottom:10px; }
/* 名字、警示的 class 不能叫 gl-name / gl-warn:射龙门(goal.css)已经用了这两个名字,两份档案每一页都载入,会互相盖掉 */
.gl-gname { font-size:16px; font-weight:700; color:var(--ink); }
.gl-tags { display:flex; flex-wrap:wrap; gap:6px; }
.gl-tags .admin-status { font-size:12px; padding:2px 8px; }
.gl-paused { border:0; cursor:pointer; font:inherit; }
.gl-seg { margin-bottom:8px; }
.gl-seg .gs-pill { min-width:72px; }
.gl-seg .gs-pill:disabled { opacity:.4; cursor:not-allowed; }
.gl-play { display:flex; flex-wrap:wrap; gap:2px 12px; font-size:13px; color:var(--ink-2); }
.gl-quiet { color:var(--ink-2); }
.gl-problems ul { margin:4px 0 0; padding-left:18px; font-size:13px; line-height:1.5; }
.gl-problems li + li { margin-top:4px; }
.gl-detail { display:block; color:var(--ink-2); }
.gl-caution { color:var(--bad); }
.gl-row > .hint { margin-top:6px; }
.gl-at { display:block; margin-top:6px; font-size:12px; color:var(--ink-2); }
.gl-add { display:flex; gap:8px; margin:10px 0; }
.gl-add input { flex:1 1 140px; min-width:0; }
.gl-count { margin-bottom:6px; }
/* 确认框挂在 body 底下(不在 .admin-workspace 里),字色要自己给,不然继承到很暗的正文色 */
.gl-modal-game { margin:0; font-size:15px; color:var(--ink); }
.gl-modal-lines { margin:0; padding-left:18px; font-size:14px; line-height:1.6; color:var(--ink); }
.gl-modal-play { display:flex; flex-direction:column; gap:4px; font-size:13px; color:var(--ink-2); }

/* 财务设置(2026-10-19):每种方式 / 每家网关一张卡,标题右边是状态和开关 */
.fin-card .fin-head { display:flex; align-items:center; justify-content:space-between; gap:8px; flex-wrap:wrap; margin:-4px 0 10px; font-size:15px; }
.fin-switch { display:inline-flex; align-items:center; gap:8px; flex-wrap:wrap; }
.fin-pick { display:inline-flex; align-items:center; gap:6px; flex-wrap:wrap; justify-content:flex-end; }
.fin-pick select { max-width:220px; }
.fin-sub { font-weight:700; font-size:13px; margin:14px 0 6px; padding-top:10px; border-top:1px solid var(--desk-line, rgba(127,127,127,.25)); }
/* 「现在走哪家」:每种方式一段,改道 / 降级的说明标红,恢复键跟着被降级的那家 */
.fin-now-row { padding:8px 0; border-bottom:1px solid var(--desk-line, rgba(127,127,127,.2)); }
.fin-now-row:last-of-type { border-bottom:0; }
.fin-now-row .kv { margin:0; }
.fin-now-row .hint { margin:2px 0 0; }
.fin-now-gw { text-align:right; }
.fin-now-warn { color:var(--loss) !important; }
.fin-now-sub { font-size:13px; align-items:center; }
/* 网关卡收合:摘要一行写开着的方式、维护 / 降级、余额;summary 自己画箭头,flex 会吃掉原生的三角 */
.fin-gw > summary { list-style:none; cursor:pointer; margin-bottom:0; }
.fin-gw > summary::-webkit-details-marker { display:none; }
.fin-gw > summary b::before { content:'▸'; display:inline-block; width:16px; }
.fin-gw[open] > summary { margin-bottom:10px; }
.fin-gw[open] > summary b::before { content:'▾'; }
.fin-gw-sum { display:inline-flex; align-items:center; gap:8px; flex-wrap:wrap; justify-content:flex-end; font-weight:400; }
.fin-save { margin:4px 0 6px; }

/* 推广组织图(2026-10-19):一层缩进 14px,手机上缩到第 6 层就不再往右推,名字才不会被挤没 */
.pt-tree { padding:6px 8px; }
.pt-row { display:flex; align-items:center; gap:8px; padding:8px 0 8px calc(min(var(--pt-depth, 0), 6) * 14px); border-bottom:1px solid var(--desk-line, rgba(127,127,127,.2)); }
.pt-row .body { flex:1; min-width:0; }
.pt-row .body b, .pt-row .body small { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pt-row .end { text-align:right; display:flex; flex-direction:column; align-items:flex-end; }
.pt-row.is-focus { background:var(--desk-red-soft, rgba(168,37,55,.08)); }
.pt-toggle { width:28px; height:28px; flex:none; border:0; background:none; font-size:16px; cursor:pointer; color:inherit; }
.pt-name { cursor:pointer; text-decoration:underline; text-underline-offset:2px; }
.pt-more { margin:6px 0 6px 36px; }

/* 管理员列表的权限组勾选(2026-10-20) */
.perm-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 6px 12px; margin: 8px 0; }
.perm-item { display: flex; gap: 8px; align-items: flex-start; }
.perm-item input { margin-top: 3px; flex: none; }
.perm-item small { display: block; color: var(--ink-3); font-size: 12px; }
.perm-edit summary { cursor: pointer; margin-top: 6px; font-size: 13px; }

/* 射龙门「聊天」子页签(goal-chat-admin.js,2026-10-25):禁言名单、筛选一排、每句一行(名字 + UID / 内容 / 时间 · 桌 · 撤回了没),
 * 按钮在右边,手机上折到内容底下。只用黑底柠檬那套 token(--ink / --ink-2 / --line / --neon / --bad),不用开头那套纸白红 */
.gca-filter { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto auto; gap:0 12px; align-items:end; margin:0 0 12px; }
.gca-filter .field { margin:0; }
.gca-banned { display:block; width:100%; min-height:110px; margin:0 0 16px; resize:vertical; font:inherit; line-height:1.5; }
.gca-check { display:flex; align-items:center; gap:8px; min-height:44px; font-size:14px; color:var(--ink); white-space:nowrap; cursor:pointer; }
.gca-check input { flex:none; width:20px; height:20px; margin:0; accent-color:var(--neon); }
.gca-off { margin:0 0 12px; color:var(--ink); font-weight:600; }
.gca-row { flex-wrap:wrap; }
.gca-row .body { gap:4px; }
.gca-line { display:flex; flex-wrap:wrap; align-items:baseline; gap:2px 8px; overflow-wrap:anywhere; }
.gca-who { display:inline-flex; flex-wrap:wrap; align-items:baseline; gap:2px 8px; min-height:32px; padding:0; border:0; background:none; color:inherit; font:inherit; text-align:left; cursor:pointer; }
.gca-who .gca-name { text-decoration:underline; text-decoration-color:var(--line-strong); text-underline-offset:3px; }
.gca-name { unicode-bidi:isolate; }
.gca-line small { font-weight:400; }
.gca-body { display:flex; flex-wrap:wrap; align-items:center; gap:4px 8px; margin:0; font-size:15px; line-height:1.45; color:var(--ink); overflow-wrap:anywhere; }
.gca-tag { flex:none; padding:1px 8px; border-radius:var(--r-pill); font-size:12px; color:var(--ink-2); box-shadow:inset 0 0 0 1px var(--line); }
.gca-stk { flex:none; width:40px; height:40px; object-fit:contain; }
.gca-sys { color:var(--ink-2); }
.gca-row.is-recalled .gca-body { opacity:.45; text-decoration:line-through; }
.gca-gone { color:var(--bad); font-weight:600; }
.gca-row .row-actions { display:flex; flex-wrap:wrap; gap:8px; margin-left:auto; }
.gca-modal { color:var(--ink); }
.gca-modal-who { margin:0; font-size:15px; }
.gca-mins { flex-wrap:wrap; overflow:visible; margin:0; }
.gca-mins .gs-pill { min-height:44px; }
.gca-modal-field { display:grid; gap:6px; font-size:13px; color:var(--ink-2); }
@media(max-width:760px) {
  .gca-filter { grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:10px 12px; }
  .gca-row .row-actions { width:100%; margin-left:0; }
}
/* ---------- 优惠活动 / 福利红包(2026-10-26,public/admin-bonus.js)----------
 * 一行规则 / 发放记录 / 红包:标题一行,底下几组「标签 数字」可以折行;状态小方块照 .admin-status 的纸白配色,
 * 链接整串可以选、可以折行(手机上 t.me 链接很长),旁边一颗「复制链接」。
 */
/* .row .body b 是 display:block(style.css),「标签 数字」要排在同一行;一组不从中间断 */
.row .body .bk-facts, .bk-claim .bk-facts { display:flex; flex-wrap:wrap; gap:2px 12px; }
.bk-fact { white-space:nowrap; }
.row .body .bk-fact b, .bk-fact b { display:inline; font-size:inherit; font-weight:600; font-variant-numeric:tabular-nums; }
/* 规则 / 发放 / 红包那一行:按钮排到下面去,内容占满整行(不然手机上内容被挤成一个字一行) */
.row.bk-rule, .row.bk-grant, .row.bk-packet { flex-wrap:wrap; align-items:flex-start; }
.row.bk-rule > .body, .row.bk-grant > .body, .row.bk-packet > .body { flex:1 1 100%; }
.row.bk-rule > .row-actions { display:flex; flex-wrap:wrap; gap:8px; }
.bk-tag { display:inline-flex; align-items:center; margin-left:6px; padding:1px 7px; border-radius:5px; font-size:12px; font-weight:500; color:var(--desk-secondary); background:#f1f2f4; white-space:nowrap; vertical-align:1px; }
.bk-tag.is-on, .bk-tag.is-granted, .bk-tag.is-live { color:var(--desk-green); background:#edf6f0; }
.bk-tag.is-skipped, .bk-tag.is-wait, .bk-tag.is-warn { color:var(--desk-amber); background:#faf3e6; }
.bk-tag.is-voided, .bk-tag.is-archived, .bk-tag.is-closed { color:var(--desk-red); background:var(--desk-red-soft); }
.bk-link { display:flex; align-items:center; gap:8px; margin-top:6px; min-width:0; }
.bk-link code { flex:1; min-width:0; padding:8px 10px; border-radius:7px; background:#f6f7f9; box-shadow:inset 0 0 0 1px var(--desk-line); font-size:12px; overflow-wrap:anywhere; user-select:all; }
.bk-link .btn { flex:none; }
.bk-created { box-shadow:inset 0 0 0 1px var(--desk-green) !important; }
.bk-claim { display:grid; gap:2px; padding:10px 0; border-top:1px solid var(--desk-line); }
.bk-claim .btn-row { margin-top:4px; }
.bk-form [hidden] { display:none !important; }
/* 判断规则(2026-10-28 简化):防一人多领三档是一张张可点的卡,选中的描柠檬边;进阶设定折起来 */
.bk-presets { display:grid; gap:8px; min-width:0; margin:0 0 12px; padding:0; border:0; }
.bk-presets > legend { padding:0; margin-bottom:8px; font-weight:600; }
.bk-preset { padding:10px 12px; border-radius:8px; box-shadow:inset 0 0 0 1px var(--line); cursor:pointer; }
.bk-preset:has(input:checked) { box-shadow:inset 0 0 0 2px var(--neon); }
.bk-preset input { width:18px; height:18px; accent-color:var(--neon); }
.bk-preset small { margin-top:2px; color:var(--mute); font-size:13px; line-height:1.45; }
.bk-adv { margin:4px 0 8px; }
.bk-adv > summary { cursor:pointer; padding:8px 0; }
/* 弹窗运营:纸白编辑器 + 原样霓虹预览。内容在左,账号频控在右;不混进群发/分享设置。 */
.gi-editor { min-width:0; }
.gi-editor [hidden] { display:none !important; }
.gi-heading { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:8px 16px; }
.gi-heading h2 { margin:0; font-size:18px; font-weight:650; }
.gi-check { display:flex; align-items:center; gap:8px; min-height:44px; font-size:14px; cursor:pointer; }
.gi-check input { flex:none; width:18px; height:18px; accent-color:var(--gold); }
.gi-sections { display:grid; grid-template-columns:minmax(0,1.3fr) minmax(0,1fr); gap:24px; margin-top:20px; }
.gi-section { min-width:0; }
.gi-section + .gi-section { border-left:1px solid var(--line); padding-left:24px; }
.gi-section h3 { font-size:15px; font-weight:650; margin:0 0 16px; }
.gi-art-row { display:flex; gap:12px; align-items:center; margin-bottom:12px; }
.gi-art-row > img { width:112px; height:84px; object-fit:contain; border-radius:8px; background:var(--card-2); flex:none; }
.gi-art-row > div { min-width:0; }
.gi-art-row .hint { margin-top:8px; }
.gi-editor .field { min-width:0; margin-bottom:12px; }
.gi-editor .field :is(input,textarea,select) { box-sizing:border-box; width:100%; min-height:44px; min-width:0; border:1px solid var(--line); border-radius:8px; padding:10px 12px; background:var(--card); color:var(--paper); font:inherit; font-size:14px; }
.gi-editor .field textarea { resize:vertical; line-height:1.5; }
.gi-editor :is(input,select,textarea,button,summary):focus-visible { outline:2px solid var(--gold); outline-offset:3px; }
.gi-editor :is(input,select,textarea,button):disabled { opacity:.55; cursor:default; }
.gi-extra { margin:0 0 12px; }
.gi-extra summary { min-height:44px; padding:12px 0; cursor:pointer; font-size:13px; color:var(--mute); }
.gi-columns { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.gi-actions { display:flex; flex-wrap:wrap; align-items:center; gap:8px; }
.gi-editor .btn { min-height:44px; white-space:normal; }
.gi-policy-note { border-top:1px solid var(--line); margin-top:16px; padding-top:16px; }
.gi-policy-note b { font-size:13px; }
.gi-policy-note p { margin-top:4px; }
.gi-status { margin:16px 0 0; overflow-wrap:anywhere; }
.gi-status:empty { display:none; }
.gi-footer { display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:12px; border-top:1px solid var(--line); margin-top:20px; padding-top:16px; }
.gi-admin-preview { --sans:system-ui,-apple-system,'PingFang SC',sans-serif; }
@media(max-width:760px) {
  .gi-sections { grid-template-columns:minmax(0,1fr); gap:20px; }
  .gi-section + .gi-section { border-left:0; border-top:1px solid var(--line); padding:20px 0 0; }
}
@media(max-width:380px) {
  .gi-art-row { align-items:flex-start; flex-direction:column; }
  .gi-columns { grid-template-columns:minmax(0,1fr); gap:0; }
}
/* 活动弹窗(首充送,2026-10-30):「优惠活动」最上面一块。状态牌 + 时间 + 金额 + 三张缩图单选 + 对象 / 频率 + 统计;预览是原样的玩家弹窗 */
.pp-editor { min-width:0; }
.pp-editor [hidden] { display:none !important; }
.pp-heading { display:flex; align-items:center; flex-wrap:wrap; gap:8px 12px; }
.pp-heading h2 { margin:0; font-size:18px; font-weight:650; }
.pp-state { padding:2px 10px; border-radius:var(--r-pill, 999px); font-size:12px; font-weight:700; line-height:20px; color:var(--mute); box-shadow:inset 0 0 0 1px var(--line); white-space:nowrap; }
.pp-state.is-pending { color:var(--neon, #e5ff3d); box-shadow:inset 0 0 0 1px var(--neon, #e5ff3d); }
.pp-state.is-live { color:#0a0a0a; background:var(--neon, #e5ff3d); box-shadow:none; }
/* 已结束跟已关闭分开:关闭是灰框,结束是实心灰底 */
.pp-state.is-ended { color:var(--paper, #f2f2f2); background:rgba(255,255,255,.14); box-shadow:none; }
.pp-window { display:flex; flex-wrap:wrap; gap:4px 16px; margin:6px 0 4px; }
.pp-when b { font-variant-numeric:tabular-nums; }
.pp-check { display:flex; align-items:center; gap:8px; min-height:44px; font-size:14px; cursor:pointer; }
.pp-check input { flex:none; width:18px; height:18px; accent-color:var(--gold); }
.pp-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; margin-top:12px; }
.pp-editor .field { min-width:0; margin-bottom:4px; }
.pp-editor .field :is(input,select) { box-sizing:border-box; width:100%; min-height:44px; min-width:0; border:1px solid var(--line); border-radius:8px; padding:10px 12px; background:var(--card); color:var(--paper); font:inherit; font-size:14px; }
.pp-editor :is(input,select,button):focus-visible { outline:2px solid var(--gold); outline-offset:3px; }
.pp-editor :is(input,select,button):disabled { opacity:.55; cursor:default; }
.pp-status.is-bad { color:var(--bad, #ff5a5a); font-weight:600; }
.pp-freq { margin-top:12px; max-width:320px; }
.pp-stats { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; margin-top:16px; padding-top:16px; border-top:1px solid var(--line); }
.pp-stats > div { display:grid; gap:2px; min-width:0; }
.pp-stats span { color:var(--mute); font-size:13px; overflow-wrap:anywhere; }
.pp-stats b { font-size:22px; font-weight:700; font-variant-numeric:tabular-nums; }
.pp-status { margin:12px 0 0; overflow-wrap:anywhere; }
.pp-status:empty { display:none; }
.pp-footer { display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:12px; border-top:1px solid var(--line); margin-top:16px; padding-top:16px; }
.pp-actions { display:flex; flex-wrap:wrap; align-items:center; gap:8px; }
.pp-editor .btn { min-height:44px; white-space:normal; }
#promoPopupSettings { margin-bottom:16px; }
/* 新人红包(2026-11-02):「优惠活动」最上面一块,套活动弹窗的 pp- 样式;金额 / 倍数 / 名额三格一排,统计格子多、自己排 */
#newbieSettings { margin-bottom:16px; }
.nb-grid { grid-template-columns:repeat(3,minmax(0,1fr)); }
.nb-stats { grid-template-columns:repeat(auto-fill,minmax(140px,1fr)); }
.nb-grants { margin-top:16px; padding-top:16px; border-top:1px solid var(--line); }
.nb-grants .section-title { margin-top:0; }
@media(max-width:560px) { .nb-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } }
/* 新人红包 Bot 欢迎信(2026-11-02):表单和发放记录中间;现在用的那份放小缩图,选好还没上传的放预览(影片静音) */
.nb-welcome { margin-top:16px; padding-top:16px; border-top:1px solid var(--line); }
.nb-welcome .section-title { margin-top:0; }
.nb-welcome > .hint, .nb-welcome > .field, .nbw-now, .nbw-pick { margin-bottom:10px; }
.nb-welcome .hint.is-bad { color:var(--bad, #ff5a5a); font-weight:600; }
.nb-welcome .pp-status { margin:0 0 10px; }
.nb-welcome .btn { min-height:44px; white-space:normal; }
.nbw-now { display:flex; align-items:center; gap:12px; }
.nbw-thumb { flex:none; width:72px; height:72px; object-fit:cover; border-radius:8px; background:#000; }
.nbw-media { display:block; max-width:min(100%,320px); max-height:320px; margin-bottom:8px; border-radius:8px; background:#000; }
.pp-lines > span { display:block; }
/* 手机上 datetime-local 连日期带时间要整行宽才放得下 */
@media(max-width:560px) { .pp-grid-time { grid-template-columns:minmax(0,1fr); gap:0; } }
@media(max-width:380px) { .pp-grid { grid-template-columns:minmax(0,1fr); gap:0; } }
/* 福利红包分享图(2026-10-28):缩图(4:5,点开看大图)+ 下载 / 发到群;超管的「发到哪些群」清单 */
.bk-share { display:flex; align-items:flex-start; gap:12px; margin-top:8px; min-width:0; }
.bk-card { flex:none; display:grid; place-items:center; width:120px; aspect-ratio:4 / 5; padding:0; border:0; border-radius:8px; overflow:hidden; background:#111; box-shadow:inset 0 0 0 1px var(--desk-line); cursor:zoom-in; }
.bk-card img { display:block; width:100%; height:100%; object-fit:cover; }
.bk-card-wait { padding:8px; color:#aaa; font-size:12px; line-height:1.4; text-align:center; }
.bk-share-side { display:grid; gap:6px; min-width:0; }
.bk-share-side .btn-row { margin:0; flex-wrap:wrap; }
.bk-share-side select { max-width:180px; }
.bk-card-modal { width:min(460px,100%); max-height:92vh; }
.bk-card-modal img { display:block; width:100%; height:auto; min-height:0; object-fit:contain; border-radius:10px; }
.bk-card-modal a { text-decoration:none; }
/* 链接框是浅底:字色写死成深色(深色后台主题下原本继承成白字,整串链接看不见) */
.bk-link code { color:#1f2329; }
.row.bk-chat { align-items:center; }
.row.bk-chat.is-checked { margin-top:8px; border-radius:8px; box-shadow:inset 0 0 0 1px var(--desk-green); padding:8px 10px; }
@media(max-width:760px) {
  .bk-link { flex-wrap:wrap; }
  .bk-link .btn { width:100%; }
}
/* 资源下载(goal-raw-admin.js):牌照玩家画面聊天栏那颗白底小牌(goal.css 的 gl-cap-card),名字另取 gr- 开头免得两份互盖 */
.gr-table th, .gr-table td { white-space:nowrap; padding:8px 12px; }
.gr-card { display:inline-grid; place-items:center; min-width:28px; padding:2px 6px; border-radius:6px; background:#fff; color:#111; font-style:normal; font-size:14px; font-weight:800; line-height:1.2; font-variant-numeric:tabular-nums; }
.gr-card.is-red { color:#d8262f; }
.gr-none { color:var(--mute); }
/* KOL 成效(2026-11-02):表单两栏、每天表四栏 */
.kol-form { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
.kol-form label { display:flex; flex-direction:column; gap:4px; font-size:12px; color:var(--ink-2); }
.kol-form input { min-height:38px; padding:0 8px; border:1px solid var(--surface-2); border-radius:8px; background:var(--surface); color:inherit; font:inherit; }
.kol-day-row { display:grid; grid-template-columns:44px repeat(3,minmax(0,1fr)); gap:4px; padding:8px 12px; font-size:12px; font-variant-numeric:tabular-nums; }
.kol-day-row>:not(:first-child) { text-align:right; }
.kol-day-row+.kol-day-row { border-top:1px solid var(--surface-2); }

/* SQL 主控台(sql-console-admin.js):表格可横向卷动,差异与警告标色 */
.sqlc-sql { width: 100%; box-sizing: border-box; font-family: ui-monospace, Menlo, monospace; font-size: 13px; }
.sqlc-actions { margin: 8px 0; display: flex; gap: 8px; }
.sqlc-actions .btn, .sqlc-preview .btn, .sqlc-table .btn { width: auto; }
.sqlc-scroll { overflow-x: auto; max-height: 60vh; }
.sqlc-table { border-collapse: collapse; font-size: 12px; font-family: ui-monospace, Menlo, monospace; }
.sqlc-table th, .sqlc-table td { border: 1px solid rgba(127, 127, 127, .3); padding: 2px 6px; text-align: left; vertical-align: top; white-space: pre-wrap; max-width: 420px; word-break: break-all; }
.sqlc-change { margin: 8px 0; }
.sqlc-warn li, .sqlc-err { color: #e0533d; }
.sqlc-ok { color: #2e9d5b; }
.sqlc-bad td { background: rgba(224, 83, 61, .12); }
.sqlc-field { display: block; margin: 8px 0; }
.sqlc-field input[type="text"] { width: 100%; box-sizing: border-box; }
