
@charset "UTF-8";
/* ==========================================================================
   战术中心 · 手机端触控基础层 M1-101 ~ M1-108（2026-10-24）
   --------------------------------------------------------------------------
   加载位置：tokens.css / app.css / 各模块 css / ui-fix.css 之后，
   因此同特异性的覆盖规则以本文件为准。

   适用范围约定：
     · 「M1-101 全局触控基础」段无媒体查询，全视口生效（桌面端无视觉副作用）
     · 其余段落全部包在 @media (max-width:768px) 内，桌面端 0 影响
     · mobile.html 是自绘手机壳（body[data-mb-native]），结构性覆盖用
       body:not([data-mb-native]) 排除，避免两套体系互相顶掉
   ========================================================================== */

/* ====================== M1-101 全局触控基础（全视口） ====================== */

/* ① 点击高亮：移动端点任意可点元素都会闪出一块半透明灰（并被「顶起来」），
      根因是全站从未设置 -webkit-tap-highlight-color。这里对全部元素清零。 */
*,*::before,*::after{-webkit-tap-highlight-color:transparent}

/* ② 横屏时 iOS 会自动放大字号，锁死 100% */
html,body{-webkit-text-size-adjust:100%;text-size-adjust:100%}

/* ③ touch-action：manipulation = 禁双击缩放，保留单指滚动与双指缩放 */
a[href],button,input,select,textarea,summary,label[for],
[role="button"],[role="tab"],[role="link"],[role="option"],[role="menuitem"],
[role="checkbox"],[role="switch"],[role="radio"],
[onclick],[data-act],[data-go],[data-tab],[data-seg],[data-view],[data-view-panel],
[data-card],[data-plat],[data-switch],[data-pop],[data-p],[data-desk],[data-social-view],
[data-monitor-tab],[data-rp],[data-arsenal],
.btn,.chip,.tab,.seg button,.nav a,.i-btn,.ic-btn,.pager button,.pager a,.tool,
.mb-tabbar a,.crumb-back,.drawer nav a,.hd-user,.ft-links a,.u-inline-btn{
  touch-action:manipulation;
}

/* ③-a 手势区例外：这些区域靠原生手势拖动/缩放，不能被 manipulation 覆盖。
      与各自模块里的原始声明保持一致（加 !important 防止加载顺序影响）。 */
.rp-map{touch-action:none!important}  /* important-ok: 手势区需压住后加载的模块声明 */                    /* 回放地图：拖动 + 双指缩放 */
.rp-tl-track{touch-action:none!important}  /* important-ok: 同上，时间轴拖动 */               /* 回放时间轴：拖动进度 */
.onl-svg{touch-action:none!important}  /* important-ok: 同上，趋势图游标 */                   /* 在线趋势图：拖动游标 */
.plan.is-map{touch-action:pan-y!important}  /* important-ok: 同上，战术地图单指平移 */              /* 战术地图：单指平移 */
.plan.is-map.is-zoom{touch-action:none!important}  /* important-ok: 同上，缩放态双指 */       /* 战术地图缩放态：双指 */
.snapshot-scroll{touch-action:pan-y!important}  /* important-ok: 同上，快照纵向滚动 */          /* 账号快照纵向滚动 */

/* ④ 长按不要弹系统选择/放大镜的地方（导航、按钮、chip、tab） */
.nav a,.hd-r button,.hd-r a,.btn,.chip,.tab,.seg button,.ic-btn,.i-btn,
.mb-tabbar a,.tool,.pager button,.pager a,.crumb-back,.drawer nav a,
.ft-links a,.ft-links button{
  -webkit-touch-callout:none;-webkit-user-select:none;user-select:none;
}

/* ④-a 正文 / 可复制内容必须保留可选中可复制（比赛 ID、玩家名、代码块…） */
p,li,td,th,dd,dt,code,pre,blockquote,
h1,h2,h3,h4,h5,h6,.num,.mono,[data-copy],[data-match-id],.match-id,.kv b,.row .who b{
  -webkit-user-select:text;user-select:text;-webkit-touch-callout:default;
}


/* 手机端字号档（2026-10-29 令牌化）：值与改造前逐条一致，只做引用替换，不改渲染。
   新增档位必须复用既有值，不要凭空造新字号；桌面端请用 tokens.css 的 --t-* 七档。 */
:root{--m-fs-105:10.5px;--m-fs-115:11.5px;--m-fs-125:12.5px;--m-fs-13:13px;--m-fs-135:13.5px;--m-fs-14:14px;--m-fs-145:14.5px;--m-fs-15:15px;--m-fs-16:16px;--m-fs-17:17px;--m-fs-18:18px;--m-fs-19:19px;--m-fs-20:20px;--m-fs-21:21px;--m-fs-23:23px;--m-fs-24:24px;--m-fs-26:26px;--m-fs-28:28px}

/* ====================== M1-102 统一按压反馈 ====================== */
:root{--mb-press:rgba(31,46,61,.09);--mb-press-strong:rgba(31,46,61,.15);--mb-tabbar-h:52px;
  /* 底部抽屉/浮层的向上投影：极浅、带负扩散，不做立体感。
     必须挂在 :root —— 只挂 mobile.html 的 body 会让其余 m-*.html 拿不到值（投影丢失）。 */
  --mb-sh-up:0 -8px 22px -16px rgba(31,46,61,.45);
  --mb-sh-sheet:0 -8px 32px -18px rgba(26,42,58,.4);
  --mb-sh-sheet-l:0 -18px 50px -24px rgba(26,42,58,.45);
}
[data-theme="dark"]{--mb-press:rgba(255,255,255,.11);--mb-press-strong:rgba(255,255,255,.18)}

@media (max-width:768px){
  /* 按压反馈：只做「底色加深 + 1px 下沉」，绝不用 transform:scale（用户明确反感放大感）。
     inset 阴影铺满盒子 = 不改布局、不改尺寸、不遮挡文字，深浅主题都可见。 */
  a[href]:active,button:active,summary:active,
  [role="button"]:active,[role="tab"]:active,[role="link"]:active,
  [data-act]:active,[data-go]:active,[data-tab]:active,[data-seg]:active,[data-card]:active,
  [data-plat]:active,[data-switch]:active,[data-p]:active,[data-view]:active,[data-view-panel]:active,
  .btn:active,.chip:active,.tab:active,.seg button:active,.tool:active,
  .pager button:active,.pager a:active,.mb-tabbar a:active,.crumb-back:active,
  .mb-press{
    box-shadow:inset 0 0 0 999px var(--mb-press);
    transition-duration:90ms;
  }
  /* 按钮类补 1px 下沉（不改变尺寸） */
  .btn:active,.chip:active,.tool:active,.mb-press.is-btn{transform:translateY(1px)}
}

/* ====================== M1-103 安全区 + M1-106 排版令牌 ====================== */
@media (max-width:768px){
  :root{
    /* 手机端字号下限：正文 15px、辅助 14px、最小 12.5px */
    --t-mega:clamp(28px,7.6vw,34px);
    --t-h2:clamp(21px,5.4vw,24px);
    --t-h3:17px;
    --t-lead:16px;
    --t-body:15px;
    --t-sm:14px;
    --t-xs:12.5px;
    /* 间距 / 圆角 */
    --pad:16px;
    --gap:14px;
    --gap-s:10px;
    --sec:44px;
    --r-l:16px;
    --r-m:12px;
    --r-s:8px;
  }

  body:not([data-mb-native]){
    font-size:var(--t-body);
    line-height:1.75;
    overflow-wrap:break-word;      /* 长昵称 / 长邮箱 / 长 URL 不撑破容器 */
    /* 底部给 tabbar 留位：无刘海时 env() = 0，不多出空白 */
    padding-bottom:calc(var(--mb-tabbar-h) + 10px + env(safe-area-inset-bottom,0px));
  }

  /* 左右避开刘海 / 圆角（横屏），无安全区时 env() = 0 */
  body:not([data-mb-native]) .hd-in,
  body:not([data-mb-native]) .main,
  body:not([data-mb-native]) .ft-in,
  body:not([data-mb-native]) .hero,
  body:not([data-mb-native]) .page-hd{
    padding-left:calc(var(--pad) + env(safe-area-inset-left,0px));
    padding-right:calc(var(--pad) + env(safe-area-inset-right,0px));
  }

  /* 长串（邮箱 / URL / 比赛 ID）允许任意处断行 */
  body:not([data-mb-native]) a[href],
  body:not([data-mb-native]) .num,
  body:not([data-mb-native]) code{overflow-wrap:anywhere}

  /* 手机端正文下限 14px：max(14px,1em) 只抬高偏小的，不会把 15/16px 压小 */
  body:not([data-mb-native]) p,
  body:not([data-mb-native]) li,
  body:not([data-mb-native]) td,
  body:not([data-mb-native]) th,
  body:not([data-mb-native]) dd,
  body:not([data-mb-native]) .sub,
  body:not([data-mb-native]) .hint,
  body:not([data-mb-native]) .note,
  body:not([data-mb-native]) .meta,
  body:not([data-mb-native]) .src-note,
  body:not([data-mb-native]) .ft{font-size:max(14px,1em)}

  /* 辅助文字下限 12px */
  body:not([data-mb-native]) .tag,
  body:not([data-mb-native]) .eye,
  body:not([data-mb-native]) .crumb,
  body:not([data-mb-native]) small{font-size:max(12px,1em)}

  /* 数字列等宽（与桌面端 .num 约定一致） */
  body:not([data-mb-native]) .num,
  body:not([data-mb-native]) .kpi b,
  body:not([data-mb-native]) .kv b,
  body:not([data-mb-native]) .tbl .r{
    font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;
  }

  /* 卡片内边距 / 块间距收紧一点，但保持呼吸 */
  body:not([data-mb-native]) .card{padding:16px}
  body:not([data-mb-native]) .sec-h{margin-bottom:18px}
}

/* ====================== M1-105 触控尺寸统一 ====================== */
@media (max-width:768px){
  /* 命中区扩大一律用 padding / min-height / 伪元素，绝不放大元素本身 */
  body:not([data-mb-native]) .chip,
  body:not([data-mb-native]) .seg button,
  body:not([data-mb-native]) .tab,
  body:not([data-mb-native]) .btn-quiet,
  body:not([data-mb-native]) .ic-btn,
  body:not([data-mb-native]) .i-btn{
    min-height:44px;display:inline-flex;align-items:center;justify-content:center;
  }
  body:not([data-mb-native]) .chip,
  body:not([data-mb-native]) .seg button,
  body:not([data-mb-native]) .tab{padding-left:14px;padding-right:14px}

  /* 分页器数字：历史最小号元素，强制 44×44 */
  body:not([data-mb-native]) .pager button,
  body:not([data-mb-native]) .pager a{
    min-width:44px;min-height:44px;padding:0 10px;
    display:inline-flex;align-items:center;justify-content:center;
  }
  body:not([data-mb-native]) .pager{gap:8px}

  /* 关闭按钮 × */
  body:not([data-mb-native]) .pop-x,
  body:not([data-mb-native]) .modal-x,
  body:not([data-mb-native]) [data-close]{
    min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;
  }

  /* 页脚链接与表格内小操作 */
  body:not([data-mb-native]) .ft-links a,
  body:not([data-mb-native]) .ft-links button{
    min-height:44px;display:inline-flex;align-items:center;
  }
  body:not([data-mb-native]) .ft-links{gap:8px 16px}

  /* 表单控件 */
  body:not([data-mb-native]) .input,
  body:not([data-mb-native]) .select{min-height:46px}

  /* 相邻可点元素最小间距 8px */
  body:not([data-mb-native]) .seg,
  body:not([data-mb-native]) .chips,
  body:not([data-mb-native]) .acts,
  body:not([data-mb-native]) .btn-row{gap:8px}
}

/* ====================== M1-107 滚动与手势 ====================== */
@media (max-width:768px){
  /* 纵向滚动容器：惯性 + 不把滚动传给整页 */
  body:not([data-mb-native]) .modal-bd,
  body:not([data-mb-native]) .sb-history,
  body:not([data-mb-native]) .md-scroll,
  body:not([data-mb-native]) .table-scroll,
  body:not([data-mb-native]) .wb-table-scroll,
  body:not([data-mb-native]) .wb-table-scroll-trend,
  body:not([data-mb-native]) .snapshot-scroll,
  body:not([data-mb-native]) [data-mb-scroll]{
    -webkit-overflow-scrolling:touch;overscroll-behavior:contain;
  }

  /* 禁横向橡皮筋：横向溢出必须为 0 */
  html,body:not([data-mb-native]){overflow-x:hidden}
  html{overscroll-behavior-y:none}

  /* 全局 toast 抬到 tabbar 之上，别被导航压住 */
  body:not([data-mb-native]) .misc-toast{
    bottom:calc(var(--mb-tabbar-h) + 20px + env(safe-area-inset-bottom,0px));
  }
}

/* ====================== M1-104 手机端底部 tab 导航 ====================== */
.mb-tabbar{
  position:fixed;left:0;right:0;bottom:0;z-index:150;
  display:none;                                  /* 桌面端不出现 */
  background:var(--card);
  border-top:1px solid var(--line);
  box-shadow:var(--mb-sh-up);
  padding-bottom:env(safe-area-inset-bottom,0px); /* 无刘海 = 0，不多留白 */
}
@media (max-width:768px){
  .mb-tabbar{display:flex}
}
.mb-tabbar a{
  flex:1 1 0;min-width:0;min-height:52px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  font-size:12px;line-height:1.2;font-weight:400;color:var(--t2);
  transition:color 90ms var(--ease),background 90ms var(--ease);
  position:relative;
}
.mb-tabbar a svg{width:22px;height:22px;stroke:currentColor;stroke-width:1.7;fill:none}
/* 激活态：颜色 + 顶部指示条（页面加载即正确，不依赖异步） */
.mb-tabbar a[aria-current="page"]{color:var(--blue);font-weight:500}
.mb-tabbar a[aria-current="page"]::before{
  content:"";position:absolute;top:0;left:50%;transform:translateX(-50%);
  width:26px;height:3px;border-radius:0 0 3px 3px;background:var(--blue);
}
.mb-tabbar a:active{background:var(--wash)}

/* 弹层/抽屉打开时锁滚动（由 mobile.js 加 class） */
body.mb-locked{overflow:hidden!important}  /* important-ok: 抽屉锁定滚动，需压 body 行内 overflow */
body.mb-locked .mb-tabbar{display:none}

/* ====================== M1-105 补充：实测名单逐一补命中区 ======================
   下面每条都来自 390×844 实测「触控区 <44px」的清单（M1-105），
   一律用 min-height / min-width / padding / 伪元素扩命中区，不改元素视觉尺寸。 */
@media (max-width:768px){
  /* 页头：在线胶囊 / 图标按钮 / 图标化文字按钮 */
  body:not([data-mb-native]) .hd-pill{
    min-height:44px;display:inline-flex;align-items:center;padding-left:12px;padding-right:12px;
  }
  body:not([data-mb-native]) .ic-btn,
  body:not([data-mb-native]) .hd .ic-btn{min-width:44px;padding-left:4px;padding-right:4px}
  body:not([data-mb-native]) .hd .btn,
  body:not([data-mb-native]) .hd-icobtn{min-width:44px;padding-left:8px;padding-right:8px}

  /* 面包屑 / 页脚 / 公告「查看更多」 */
  body:not([data-mb-native]) .crumb a,
  body:not([data-mb-native]) .page-hd .crumb a{
    min-height:44px;min-width:44px;display:inline-flex;align-items:center;padding-right:6px;
  }
  body:not([data-mb-native]) .ft-links a,
  body:not([data-mb-native]) .ft-links button{
    min-width:44px;justify-content:center;padding-left:4px;padding-right:4px;
  }
  body:not([data-mb-native]) .ann-more{
    min-height:44px;display:inline-flex;align-items:center;padding-right:6px;
  }

  /* 搜索历史条目 */
  body:not([data-mb-native]) .sb-history button{
    min-height:44px;display:flex;align-items:center;
  }

  /* 状态页：自动刷新开关 / 快捷链接 */
  body:not([data-mb-native]) .st-auto{min-height:44px}
  body:not([data-mb-native]) .st-link{
    min-height:44px;display:inline-flex;align-items:center;padding-left:12px;padding-right:12px;
  }

  /* 面板右上角「更多 / 管理全部」、表格内的小操作 */
  body:not([data-mb-native]) .more{
    min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:center;padding-left:8px;padding-right:8px;
  }
  body:not([data-mb-native]) .acct-acts button{
    min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;
  }

  /* 排行榜表头排序按钮：只补 min-width，横向溢出由 M1-107 的硬指标复验 */
  body:not([data-mb-native]) .th-btn{min-width:44px;justify-content:center}

  /* 正文里的行内链接（数据源、公告链接）：用伪元素纵向扩到 44，不换行不占位 */
  body:not([data-mb-native]) p a,
  body:not([data-mb-native]) .src-note a,
  body:not([data-mb-native]) .note a{position:relative}
  body:not([data-mb-native]) p a::after,
  body:not([data-mb-native]) .src-note a::after,
  body:not([data-mb-native]) .note a::after{
    content:"";position:absolute;left:0;right:0;top:-14px;bottom:-14px;
  }

  /* 战绩/封禁页「最近查询」提示按钮 */
  body:not([data-mb-native]) .query-hints button{
    min-height:44px;display:inline-flex;align-items:center;padding-left:12px;padding-right:12px;
  }
  /* ---- 第二批：全站 43 页实测名单（模块自绘的小控件） ---- */
  /* 无类名的小按钮（各模块自己写的裸 button） */
  body:not([data-mb-native]) button:not([class]),
  body:not([data-mb-native]) [role="button"]:not([class]){
    min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:center;
    padding-left:10px;padding-right:10px;
  }
  body:not([data-mb-native]) .btn{min-height:44px}
  body:not([data-mb-native]) .btn-sm{min-width:44px;min-height:44px}

  /* 后台表格行内操作（.tbl .acts-cell .more 原本 40px、特异性更高，这里对齐补齐） */
  body:not([data-mb-native]) .tbl .acts-cell .more{min-height:44px;min-width:44px}

  /* 登录/注册/重置页的 logo 链接、密码眼睛、回放播放控制 */
  body:not([data-mb-native]) .logo{min-height:44px}
  body:not([data-mb-native]) .pwd-eye,
  body:not([data-mb-native]) .ctl-btn{min-width:44px;min-height:44px}

  /* 文档侧边导航、表单一句话说明里的链接 */
  body:not([data-mb-native]) .doc-nav a,
  body:not([data-mb-native]) .hint a,
  body:not([data-mb-native]) .foot a{
    min-height:44px;display:inline-flex;align-items:center;
  }

  /* 表单控件：滑块整条 44 高可拖；原生勾选框放大到 22（命中区由所在 label 行承担） */
  body:not([data-mb-native]) input[type="range"]{height:44px;min-height:44px}
  body:not([data-mb-native]) input[type="checkbox"],
  body:not([data-mb-native]) input[type="radio"]{width:22px;height:22px}

  /* 武器页 10px 微型标注（DPS / 射速…）抬到 12px 下限 */
  body:not([data-mb-native]) .gun-mk,
  body:not([data-mb-native]) .gun-prof-t{font-size:12px}

  /* 表单里包在 label / 说明行里的行内链接 */
  body:not([data-mb-native]) label a,
  body:not([data-mb-native]) .otp-foot a,
  body:not([data-mb-native]) .agree a{
    min-height:44px;display:inline-flex;align-items:center;
  }

  /* ---- 兜底：手机端可点元素命中区不小于 44×44 ----
     各模块历史声明里有 32/40px 的 min-height（ui-fix / hero / misc 等），
     特异性更高时会压掉上面的规则，这里统一用 !important 兜底。
     只锁 min-height / min-width，不改元素视觉尺寸与排版。 */
  body:not([data-mb-native]) .btn,
  body:not([data-mb-native]) .btn-sm,
  body:not([data-mb-native]) .btn-quiet,
  body:not([data-mb-native]) .btn-blue,
  body:not([data-mb-native]) .btn-soft,
  body:not([data-mb-native]) .chip,
  body:not([data-mb-native]) .tab,
  body:not([data-mb-native]) .seg button,
  body:not([data-mb-native]) .pager button,
  body:not([data-mb-native]) .pager a,
  body:not([data-mb-native]) .ic-btn,
  body:not([data-mb-native]) .hd-icobtn,
  body:not([data-mb-native]) .i-btn,
  body:not([data-mb-native]) .tool,
  body:not([data-mb-native]) .more,
  body:not([data-mb-native]) .st-auto,
  body:not([data-mb-native]) .st-link,
  body:not([data-mb-native]) .crumb a,
  body:not([data-mb-native]) .doc-nav a,
  body:not([data-mb-native]) .hint a,
  body:not([data-mb-native]) .ann-more,
  body:not([data-mb-native]) .hd-pill,
  body:not([data-mb-native]) .logo,
  body:not([data-mb-native]) .pwd-eye,
  body:not([data-mb-native]) .ctl-btn,
  body:not([data-mb-native]) .th-btn,
  body:not([data-mb-native]) .acct-acts button,
  body:not([data-mb-native]) .sb-history button,
  body:not([data-mb-native]) .query-hints button,
  body:not([data-mb-native]) .ft-links a,
  body:not([data-mb-native]) .ft-links button{
    min-height:44px!important;min-width:44px!important;  /* important-ok: 触控热区下限 44px，需压模块内归零 */
  }

}


/* M1-108：页脚里的「手机版」入口（≤768px 才出现，桌面端 0 影响）
   特异性要压过 wide.css 的 .ft-links a{display:inline-flex}，否则桌面端也会露出来 */
/* M1-311：桌面端也要能切回手机版，所以两端都显示（手机端补 44px 热区） */
body:not([data-mb-native]) .ft-mb-link{
  display:inline-flex;align-items:center;
  color:var(--blue);font-weight:500;
}
@media (max-width:768px){
  body:not([data-mb-native]) .ft-mb-link{min-height:44px}
}

/* ==========================================================================
   M1-201 ~ M1-208 · 手机端核心页面独立 UI（仅 ≤768px）
   ========================================================================== */
@media (max-width:768px){
  /* 八个核心页共用的手机卡片与表单基线 */
  body:not([data-mb-native]) .panel{padding:16px;border-radius:var(--r-l)}
  body:not([data-mb-native]) input.input,
  body:not([data-mb-native]) input[type="text"],
  body:not([data-mb-native]) input[type="search"],
  body:not([data-mb-native]) input[type="number"],
  body:not([data-mb-native]) select.select,
  body:not([data-mb-native]) select{
    min-height:48px;height:48px;font-size:var(--t-lead);line-height:1.3;
  }
  body:not([data-mb-native]) .page-hd{
    align-items:flex-start;gap:12px;padding-top:18px;padding-bottom:18px;
  }
  body:not([data-mb-native]) .page-hd h1{font-size:var(--t-h2);line-height:1.25}
  body:not([data-mb-native]) .page-hd .sub{margin-top:4px;line-height:1.6}
  body:not([data-mb-native]) .split{gap:var(--gap)}

  /* M1-201（R10-2 修订）：首页手机端改为「极简单框」——
     居中 Logo + 四平台搜索 + 查询按钮 + 小贴士，样式见 assets/home.css。
     原 .hero / .mb-home / .today / .announce-wrap / .steps / .final 手机端规则一并下线。 */
  body[data-page="misc-index"] .home-main{padding-top:28px;padding-bottom:40px}
  body[data-page="misc-index"] .home-tip{width:100%}

  /* M1-202 / M1-203：查询区 48px/16px，结果变手机卡片 */
  body:is([data-page="query-stats"],[data-page="ban-v2"]) .hero-query{padding-top:10px;text-align:left}
  body:is([data-page="query-stats"],[data-page="ban-v2"]) .hero-query h2{margin-top:14px;font-size:var(--t-mega)}
  body:is([data-page="query-stats"],[data-page="ban-v2"]) .hero-query .hero-lead{margin-top:8px;line-height:1.65}
  body:is([data-page="query-stats"],[data-page="ban-v2"]) #main .hero-card.panel{margin-top:16px;padding:14px}
  body:is([data-page="query-stats"],[data-page="ban-v2"]) #main .hero-card form.search{
    display:grid;grid-template-columns:minmax(0,1fr);gap:10px;
  }
  body:is([data-page="query-stats"],[data-page="ban-v2"]) #main .hero-card form.search .field,
  body:is([data-page="query-stats"],[data-page="ban-v2"]) #main .hero-card form.search .search-box,
  body:is([data-page="query-stats"],[data-page="ban-v2"]) #main .hero-card form.search button[type="submit"]{
    grid-column:1;width:100%;min-height:48px;height:48px;
  }
  body:is([data-page="query-stats"],[data-page="ban-v2"]) #main .hero-card form.search input.input{height:48px;font-size:var(--t-lead)}
  body:is([data-page="query-stats"],[data-page="ban-v2"]) .hero-chips{margin-top:10px}

  /* 战绩六视图：唯一允许横向滚动的是 chip 条；选中项由 stats.js 自动居中 */
  body[data-page="query-stats"] .wb-tabs{
    top:62px;margin-inline:calc(var(--pad) * -1);padding:6px var(--pad);
    overflow-x:auto;overscroll-behavior-inline:contain;scroll-snap-type:x proximity;
  }
  body[data-page="query-stats"] .wb-tabs .wb-seg{display:flex;width:max-content;min-width:100%;gap:8px;background:transparent}
  body[data-page="query-stats"] .wb-tabs button{flex:0 0 auto;scroll-snap-align:center;border-radius:999px;background:var(--card);box-shadow:inset 0 0 0 1px var(--line)}
  body[data-page="query-stats"] .wb-tabs button[aria-pressed="true"]{background:var(--blue);color:var(--on-blue);box-shadow:none}
  body[data-page="query-stats"] .wb-card{padding:16px}
  body[data-page="query-stats"] .wb-prow{display:flex;flex-direction:column;align-items:stretch;gap:0;padding:4px 0}
  body[data-page="query-stats"] .wb-pcell{
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    min-height:44px;padding:6px 0;white-space:normal;border-bottom:1px solid var(--line-soft);
  }
  body[data-page="query-stats"] .wb-pcell:last-child{border-bottom:0}
  body[data-page="query-stats"] .wb-pv{justify-content:flex-end;flex-wrap:wrap;text-align:right}
  body[data-page="query-stats"] .wb-pv-id{max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  body[data-page="query-stats"] .wb-tier-img{height:42px;width:auto}
  body[data-page="query-stats"] .wb-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  body[data-page="query-stats"] .wb-ctl{display:flex;flex-direction:column;align-items:stretch;gap:10px}
  body[data-page="query-stats"] .wb-field{min-width:0}
  body[data-page="query-stats"] .wb-field .seg{display:flex;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
  body[data-page="query-stats"] .wb-field .seg::-webkit-scrollbar{display:none}
  body[data-page="query-stats"] .wb-field .seg button{flex:0 0 auto}
  body[data-page="query-stats"] .wb-chart{min-width:0;width:100%;height:auto}

  /* 趋势表、赛季表、常规模式表：表格语义保留，视觉改为键左值右的纵向数据卡 */
  body[data-page="query-stats"] .wb-table-scroll{overflow:visible;border-radius:0}
  body[data-page="query-stats"] .wb-table-scroll .wb-tbl{display:block;min-width:0;width:100%}
  body[data-page="query-stats"] .wb-tbl colgroup,
  body[data-page="query-stats"] .wb-tbl thead{display:none}
  body[data-page="query-stats"] .wb-tbl tbody{display:flex;flex-direction:column;gap:10px}
  body[data-page="query-stats"] .wb-tbl tbody tr{
    display:flex;flex-direction:column;height:auto;padding:8px 12px;
    border:1px solid var(--line-soft);border-radius:var(--r-m);background:var(--wash);
  }
  body[data-page="query-stats"] .wb-tbl tbody td[data-label]{
    width:100%;display:grid;grid-template-columns:minmax(92px,.9fr) minmax(0,1.1fr);
    gap:12px;padding:7px 0;border:0;border-bottom:1px dashed var(--line-soft);
    white-space:normal;text-align:right;overflow-wrap:anywhere;
  }
  body[data-page="query-stats"] .wb-tbl tbody td[data-label]:last-child{border-bottom:0}
  body[data-page="query-stats"] .wb-tbl tbody td[data-label]::before{
    content:attr(data-label);color:var(--t2);font-family:var(--f-sans);font-size:var(--t-xs);font-weight:400;text-align:left;
  }
  body[data-page="query-stats"] .wb-tbl tbody td[colspan]{display:block;width:100%;padding:14px;text-align:center;white-space:normal}

  /* 封禁：结论只保留大状态；历史与明细均为列表卡 */
  body[data-page="ban-v2"] .verdict-single{min-height:128px;padding:18px;border-radius:var(--r-l)}
  body[data-page="ban-v2"] .verdict-word{font-size:clamp(30px,10vw,42px);line-height:1.15}
  body[data-page="ban-v2"] .ban-tl-wrap,
  body[data-page="ban-v2"] .ban-tl-wrap:hover{max-height:none;overflow:visible}
  body[data-page="ban-v2"] .timeline{display:flex;flex-direction:column;gap:8px}
  body[data-page="ban-v2"] .tl-item{padding:12px;border-radius:var(--r-m);background:var(--wash)}
  body[data-page="ban-v2"] .ban-detail-wrap{max-height:none;overflow:visible}
  body[data-page="ban-v2"] .ban-detail{display:block;width:100%}
  body[data-page="ban-v2"] .ban-detail thead{display:none}
  body[data-page="ban-v2"] .ban-detail tbody{display:flex;flex-direction:column;gap:10px}
  body[data-page="ban-v2"] .ban-detail tr{display:flex;flex-direction:column;padding:10px 12px;border:1px solid var(--line-soft);border-radius:var(--r-m);background:var(--wash)}
  body[data-page="ban-v2"] .ban-detail td[data-label]{
    display:grid;grid-template-columns:72px minmax(0,1fr);align-items:center;gap:10px;
    width:100%;padding:6px 0;border:0;text-align:right;white-space:normal;
  }
  body[data-page="ban-v2"] .ban-detail td[data-label]::before{content:attr(data-label);font-size:var(--t-xs);color:var(--t2);text-align:left}
  body[data-page="ban-v2"] .ban-detail .bd-act{display:flex;justify-content:flex-end;gap:8px}
  body[data-page="ban-v2"] .ban-detail td[colspan]{display:block;width:100%;padding:14px;text-align:center}

  /* M1-204：区服/模式为 chip；榜单彻底从宽表变两行卡片 */
  body[data-page="rank-v2"] .main > .panel:first-child .u-row{display:flex;flex-direction:column;align-items:stretch;gap:10px}
  body[data-page="rank-v2"] [data-seg="platform"]{display:none}
  body[data-page="rank-v2"] .regsel{width:100%;min-width:0}
  body[data-page="rank-v2"] .regsel-btn{display:none}
  body[data-page="rank-v2"] .regsel-menu,
  body[data-page="rank-v2"] .regsel-menu[hidden]{
    position:static;display:block;width:100%;max-width:none;max-height:none;
    padding:0;border:0;background:transparent;box-shadow:none;overflow:visible;
  }
  body[data-page="rank-v2"] #regionList{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;overscroll-behavior-inline:contain}
  body[data-page="rank-v2"] #regionList::-webkit-scrollbar{display:none}
  body[data-page="rank-v2"] .regsel-group,
  body[data-page="rank-v2"] .regsel-tip{display:none}
  /* position:relative 是必须的：底下那个 sr-only 单选框是绝对定位的，chip 自己不当
     定位上下文，它的包含块就会退到 position:relative 的 .regsel 上，于是 radio 会画在自己
     所在的横滑.Scroller 之外（按它的静态位置落到 x≈458），把 .main 撑出 68px 横向溢出。 */
  body[data-page="rank-v2"] .regsel-opt{
    position:relative;
    flex:0 0 auto;min-height:44px;padding:8px 14px;border-radius:999px;
    background:var(--card);box-shadow:inset 0 0 0 1px var(--line);
  }
  body[data-page="rank-v2"] .regsel-opt.is-on{background:var(--blue);box-shadow:none}
  body[data-page="rank-v2"] .regsel-opt.is-on .rg-name{color:var(--on-blue)}
  body[data-page="rank-v2"] .regsel-opt .rg-code,
  body[data-page="rank-v2"] .regsel-opt .rg-why,
  body[data-page="rank-v2"] .regsel-opt .rg-tag{display:none}
  /* R10-5：chip 形态下的单选框只能「视觉隐藏、仍可聚焦」。
     原先写成 display:none 会把它一并从 Tab 序列里摘掉，手机端区服就完全不可键盘选择；
     这里换成 sr-only 写法（绝对定位 + clip，不占 chip 宽度），
     焦点位置由 .regsel-opt:focus-within 的描边画在 chip 上。 */
  body[data-page="rank-v2"] .regsel-opt input{
    position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;
    overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;
  }
  body[data-page="rank-v2"] .regsel-opt:focus-within{outline:2px solid var(--blue);outline-offset:2px}
  body[data-page="rank-v2"] .rank-search{order:3;width:100%;max-width:none}
  body[data-page="rank-v2"] [data-seg="mode"]{order:2;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:100%;border-radius:999px}
  body[data-page="rank-v2"] [data-seg="mode"] button{min-width:0;padding-inline:8px}
  body[data-page="rank-v2"] .rank-top{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
  body[data-page="rank-v2"] .rank-card{min-width:0;padding:10px;border-radius:var(--r-m)}
  body[data-page="rank-v2"] .rank-card-hd{margin-bottom:6px}
  body[data-page="rank-v2"] .rank-card .tier-lg img{max-width:38px;height:38px;object-fit:contain}
  body[data-page="rank-v2"] .rank-card .rk-name{font-size:var(--t-xs)}
  body[data-page="rank-v2"] .rank-card .rk-score{font-size:var(--t-body)}
  body[data-page="rank-v2"] .rank-card .rk-meta{display:flex;flex-direction:column;gap:1px;font-size:var(--t-xs)}
  body[data-page="rank-v2"] .rank-card .rk-sub{font-size:var(--t-xs);line-height:1.35;white-space:normal}
  body[data-page="rank-v2"] .rank-board{padding:12px;overflow:visible}
  body[data-page="rank-v2"] .rank-scroll-hint{display:none}
  body[data-page="rank-v2"] .rank-scroll{overflow:visible}
  body[data-page="rank-v2"] .rank-scroll > table.rank-tbl{display:block;min-width:0;width:100%}
  body[data-page="rank-v2"] .rank-tbl colgroup,
  body[data-page="rank-v2"] .rank-tbl thead{display:none}
  body[data-page="rank-v2"] .rank-tbl tbody{display:flex;flex-direction:column;gap:10px}
  body[data-page="rank-v2"] .rank-tbl tbody tr{
    display:grid;grid-template-columns:42px repeat(3,minmax(0,1fr)) 48px;grid-template-rows:auto auto;
    gap:8px;height:auto;padding:12px 10px;border:1px solid var(--line-soft);border-radius:var(--r-m);background:var(--card);
  }
  body[data-page="rank-v2"] .rank-tbl tbody tr:nth-child(even),
  body[data-page="rank-v2"] .rank-tbl tbody tr:hover{background:var(--card)}
  body[data-page="rank-v2"] .rank-tbl tbody td{display:none;padding:0;border:0;background:transparent;min-width:0}
  body[data-page="rank-v2"] .rank-tbl td[data-col="rank"]{display:flex;grid-column:1;grid-row:1/3;align-items:flex-start}
  body[data-page="rank-v2"] .rank-tbl td[data-col="player"]{display:block;grid-column:2/5;grid-row:1}
  body[data-page="rank-v2"] .rank-tbl td[data-col="action"]{display:flex;grid-column:5;grid-row:1;justify-content:flex-end}
  body[data-page="rank-v2"] .rank-tbl td[data-col="matches"],
  body[data-page="rank-v2"] .rank-tbl td[data-col="rp"],
  body[data-page="rank-v2"] .rank-tbl td[data-col="kd"]{
    display:flex;grid-row:2;align-items:baseline;gap:4px;font-size:var(--t-xs);text-align:left;
  }
  body[data-page="rank-v2"] .rank-tbl td[data-col="matches"]{grid-column:2}
  body[data-page="rank-v2"] .rank-tbl td[data-col="rp"]{grid-column:3}
  body[data-page="rank-v2"] .rank-tbl td[data-col="kd"]{grid-column:4}
  body[data-page="rank-v2"] .rank-tbl td[data-col="matches"]::before,
  body[data-page="rank-v2"] .rank-tbl td[data-col="rp"]::before,
  body[data-page="rank-v2"] .rank-tbl td[data-col="kd"]::before{content:attr(data-label);color:var(--t2);font-family:var(--f-sans);font-size:var(--t-xs);}
  body[data-page="rank-v2"] .rk-name-line{min-width:0}
  body[data-page="rank-v2"] .rk-line2{overflow:hidden}
  body[data-page="rank-v2"] .rk-srv{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  body[data-page="rank-v2"] .rank-legend{
    display:flex;grid-template-columns:none;gap:8px;overflow-x:auto;padding-bottom:4px;scrollbar-width:none;overscroll-behavior-inline:contain;
  }
  body[data-page="rank-v2"] .rank-legend::-webkit-scrollbar{display:none}
  body[data-page="rank-v2"] .rank-legend .tl-card{flex:0 0 92px;min-width:92px;padding:10px 6px}
  body[data-page="rank-v2"] .rank-notes{grid-template-columns:minmax(0,1fr);gap:10px}
  body[data-page="rank-v2"] .pager-foot{align-items:flex-start}

  /* M1-205：状态卡单列；地图两列；折线 SVG 始终完整缩放 */
  body[data-page="status-page"] .st-grid{grid-template-columns:minmax(0,1fr);gap:var(--gap)}
  body[data-page="status-page"] .st-card{padding:16px}
  body[data-page="status-page"] .st-nums{grid-template-columns:repeat(2,minmax(0,1fr))}
  body[data-page="status-page"] .st-trend .st-seg{display:flex;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
  body[data-page="status-page"] .st-trend .st-seg::-webkit-scrollbar{display:none}
  body[data-page="status-page"] .st-trend .st-seg button{flex:0 0 auto}
  body[data-page="status-page"] .onl-wrap,
  body[data-page="status-page"] .onl-chart,
  body[data-page="status-page"] .onl-svg{width:100%;max-width:100%;height:auto;overflow:visible}
  body[data-page="status-page"] .st-maps-acts{display:grid;grid-template-columns:minmax(0,1fr) auto;width:100%;gap:8px}
  body[data-page="status-page"] .st-maps-acts .st-sel{width:100%;height:48px}
  body[data-page="status-page"] .st-maps-acts .st-seg-m{grid-column:1/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  body[data-page="status-page"] .st-mapgrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  body[data-page="status-page"] .st-map{aspect-ratio:4/3}
  body[data-page="status-page"] .st-map-name{left:7px;right:7px;bottom:6px}

  /* M1-206：概要大图、队员 chip、12 项两列、事件卡片 */
  body[data-page="match-detail"] .md-summary,
  body[data-page="match-detail"] .md-tech,
  body[data-page="match-detail"] .md-member{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  body[data-page="match-detail"] .md-summary.is-center > div{min-height:86px;padding:10px 8px}
  body[data-page="match-detail"] .md-chips{
    flex-wrap:nowrap;overflow-x:auto;margin-inline:-4px;padding:2px 4px 6px;scrollbar-width:none;overscroll-behavior-inline:contain;
  }
  body[data-page="match-detail"] .md-chips::-webkit-scrollbar{display:none}
  body[data-page="match-detail"] .md-chip{flex:0 0 auto;min-height:44px}
  body[data-page="match-detail"] .md-tech-item{padding:10px}
  body[data-page="match-detail"] .md-events{max-height:none;overflow:visible;gap:8px}
  body[data-page="match-detail"] .md-ev{
    display:grid;grid-template-columns:44px minmax(0,1fr) auto;grid-template-rows:auto auto;
    gap:4px 8px;padding:10px;border:1px solid var(--line-soft);border-radius:var(--r-m);background:var(--wash);
  }
  body[data-page="match-detail"] .md-ev-t{grid-column:1;grid-row:1/3}
  body[data-page="match-detail"] .md-ev .tag{grid-column:2;grid-row:1;justify-self:start}
  body[data-page="match-detail"] .md-ev-m{grid-column:2/4;grid-row:2}
  body[data-page="match-detail"] .md-ev-x{grid-column:3;grid-row:1;white-space:normal;text-align:right}

  /* M1-207：正方形全宽画布 + 48px 时间轴 + 大按钮与速度 chip */
  body[data-page="replay-page"] .replay{grid-template-columns:minmax(0,1fr);gap:var(--gap)}
  body[data-page="replay-page"] [data-rp-stage] > div > .panel{padding:10px}
  body[data-page="replay-page"] .rp-map{width:100%;max-width:none;aspect-ratio:1/1;border-radius:var(--r-m)}
  body[data-page="replay-page"] .rp-map canvas{width:100%;height:100%}
  body[data-page="replay-page"] .rp-tl-track{height:48px}
  body[data-page="replay-page"] .rp-tl-track::before,
  body[data-page="replay-page"] .rp-tl-fill{top:21px;height:7px}
  body[data-page="replay-page"] .rp-tl-knob{top:24px;width:22px;height:22px}
  body[data-page="replay-page"] .replay-ctl{
    display:grid;grid-template-columns:52px 52px minmax(0,1fr);align-items:center;gap:8px;margin-top:12px;
  }
  body[data-page="replay-page"] .ctl-btn{width:52px;min-width:52px;height:52px;min-height:52px;border-radius:var(--r-m)}
  body[data-page="replay-page"] .rp-ctl-t{text-align:right}
  body[data-page="replay-page"] .rp-speed{
    grid-column:1/-1;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;width:100%;background:transparent;
  }
  body[data-page="replay-page"] .rp-speed button{min-width:0;padding-inline:4px;border-radius:999px;background:var(--wash)}
  body[data-page="replay-page"] .rp-speed button[aria-pressed="true"]{background:var(--blue);color:var(--on-blue)}
  body[data-page="replay-page"] .rp-zoom{right:8px;top:8px;gap:4px}
  body[data-page="replay-page"] .rp-map-hint{display:none}

  /* M1-208：数字并排节省首屏；范围 chip 横滑；SVG viewBox 自适应 */
  body[data-page="online-page"] .rangebar{display:block;margin-bottom:12px}
  body[data-page="online-page"] .rangebar .seg{
    display:flex;flex-wrap:nowrap;width:100%;overflow-x:auto;scrollbar-width:none;overscroll-behavior-inline:contain;background:transparent;
  }
  body[data-page="online-page"] .rangebar .seg::-webkit-scrollbar{display:none}
  body[data-page="online-page"] .rangebar .seg button{flex:0 0 auto;border-radius:999px;background:var(--card)}
  body[data-page="online-page"] .onl-stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  body[data-page="online-page"] .onl-stat{min-width:0;padding:12px}
  body[data-page="online-page"] .onl-stat .v{font-size:var(--t-h2);overflow-wrap:anywhere}
  body[data-page="online-page"] .onl-panel{padding:14px}
  body[data-page="online-page"] .onl-wrap,
  body[data-page="online-page"] .onl-chart,
  body[data-page="online-page"] .onl-svg{width:100%;max-width:100%;height:auto;overflow:visible}
}

/* ==========================================================================
   M1-301 ~ M1-308 · 账号 / 控制台 / 后台同步 + 全局细节打磨（2026-10-24）
   --------------------------------------------------------------------------
   全部规则包在 @media (max-width:768px) 内，桌面端 0 影响。
   ========================================================================== */
@media (max-width:768px){

  /* ================= M1-301-a 账号：登录 / 注册 / 找回 / 重置 ================= */
  /* 单列；左侧价值说明收窄但信息不删 */
  body:not([data-mb-native]) .auth{
    grid-template-columns:minmax(0,1fr);gap:16px;max-width:none;
    padding:16px var(--pad) 6px;
  }
  body:not([data-mb-native]) .auth-side h1{font-size:var(--t-h2);line-height:1.3}
  body:not([data-mb-native]) .auth-side p{margin-top:8px;max-width:none}
  body:not([data-mb-native]) .auth-list{margin-top:12px;gap:8px}
  body:not([data-mb-native]) .auth-form,
  body:not([data-mb-native]) .authcard{
    width:100%;max-width:none;padding:18px 16px;border-radius:var(--r-l);
  }

  /* label 与控件左对齐，控件撑满整行 */
  body:not([data-mb-native]) .auth-form .field > label,
  body:not([data-mb-native]) .authcard .field > label,
  body:not([data-mb-native]) .pf-sec-form .field > label,
  body:not([data-mb-native]) .monitor-form-grid .field > label{
    display:block;text-align:left;margin-bottom:6px;
    font-size:var(--t-sm);font-weight:500;color:var(--ink);line-height:1.5;
  }

  /* 主按钮：撑满整行 + 高度 ≥52px */
  body:not([data-mb-native]) .auth-form .btn,
  body:not([data-mb-native]) .authcard .btn{
    width:100%;height:52px;min-height:52px;
    font-size:var(--t-lead);border-radius:var(--r-m);margin-top:18px;
  }
  /* 验证码行：输入框与发送按钮各占整行，位置统一 */
  body:not([data-mb-native]) .code-row{flex-wrap:wrap;gap:10px}
  body:not([data-mb-native]) .code-row .code-input,
  body:not([data-mb-native]) .code-row .code-send{flex:1 1 100%;width:100%}
  body:not([data-mb-native]) .code-row .code-send{height:52px;min-height:52px;font-size:var(--t-lead)}
  body:not([data-mb-native]) .pwd-eye{top:50%;transform:translateY(-50%)}

  /* 错误 / 结果提示位置统一：表单下方整行，圆角与卡片一致 */
  body:not([data-mb-native]) .acct-msg,
  body:not([data-mb-native]) .note[data-msg],
  body:not([data-mb-native]) p[data-msg]{
    margin-top:12px;padding:11px 13px;border-radius:var(--r-m);
    font-size:var(--t-sm);line-height:1.65;
  }

  /* 表单里的行内文字链接：inline 元素纵向 padding 不改变行高，只把命中区撑到 ≥44px */
  body:not([data-mb-native]) .auth-alt a,
  body:not([data-mb-native]) .auth-foot a,
  body:not([data-mb-native]) .auth-terms a,
  body:not([data-mb-native]) .agree a,
  body:not([data-mb-native]) .otp-foot a{
    padding-top:12px;padding-bottom:12px;
  }

  /* ================= M1-301-b profile ================= */
  body[data-page="account-profile"] [data-profile-body] > .panel{
    padding:16px;border-radius:var(--r-l);
  }
  body[data-page="account-profile"] .pf-id-row{gap:8px}
  body[data-page="account-profile"] .pf-kv-row{padding:12px 0}
  body[data-page="account-profile"] .pf-sec-hd{min-height:56px;padding:14px 0}
  body[data-page="account-profile"] .pf-sec-body{padding-left:0}
  body[data-page="account-profile"] .pf-sec-form{max-width:none}
  body[data-page="account-profile"] .pf-sec-acts .btn{min-height:48px;flex:1 1 120px}
  body[data-page="account-profile"] .pf-verify-row{gap:10px}
  body[data-page="account-profile"] .pf-verify-row .pf-code{flex:1 1 100%}
  body[data-page="account-profile"] .pf-verify-row .btn{min-height:52px;flex:1 1 120px}
  body[data-page="account-profile"] .avatar-set{row-gap:12px}
  body[data-page="account-profile"] .avatar-upload{gap:10px}
  body[data-page="account-profile"] .avatar-upload .input{flex:1 1 100%;max-width:none}
  body[data-page="account-profile"] .avatar-upload .btn{width:100%;min-height:52px}
  /* 退出登录：整行大按钮，底部不贴安全区（body 已预留 tabbar + safe-area） */
  body[data-page="account-profile"] .pf-logout{gap:10px}
  body[data-page="account-profile"] .pf-logout-bar{
    width:100%;min-height:56px;height:auto;padding:14px 18px;
    display:flex;align-items:center;justify-content:center;gap:8px;
    font-size:var(--t-lead);
  }

  /* ================= M1-302 dashboard ================= */
  /* 四张状态卡：单列后仍保持同一套规格（padding / 圆角 / 拉伸一致） */
  body[data-page="account-dashboard"] .dash-panels{
    grid-template-columns:minmax(0,1fr);grid-auto-rows:auto;gap:var(--gap);align-items:stretch;
  }
  body[data-page="account-dashboard"] .console-card-grid > .console-status-card{
    height:auto;padding:16px;border-radius:var(--r-l);
  }
  /* 战绩快照：手机没有 hover，改为触摸可滚（容器滚动，不带动整页） */
  body[data-page="account-dashboard"] .snapshot-scroll{
    flex:0 0 auto;block-size:auto;
    overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;
    max-height:300px;min-height:96px;
  }
  /* 列表项触控 ≥44px */
  body[data-page="account-dashboard"] .acct-row,
  body[data-page="account-dashboard"] .act-row,
  body[data-page="account-dashboard"] .brief-row{min-height:48px}
  body[data-page="account-dashboard"] .dash-quick{grid-template-columns:repeat(2,minmax(0,1fr))}
  body[data-page="account-dashboard"] .dash-quick-i{min-height:64px}
  body[data-page="account-dashboard"] .page-hd.dash-hello{flex-direction:column;align-items:stretch}
  body[data-page="account-dashboard"] .page-hd.dash-hello .acts{gap:10px}
  body[data-page="account-dashboard"] .page-hd.dash-hello .acts .btn{flex:1 1 0;min-height:52px}

  /* ================= M1-303 monitors / monitor-new ================= */
  /* 任务行：状态 / 目标 / 最近运行 / 操作 四段各就位，信息不删减 */
  body:is([data-page="account-monitors"],[data-page="account-dashboard"]) .acct-row{
    display:grid;
    grid-template-columns:12px minmax(0,1fr) auto;
    grid-template-rows:auto auto;
    gap:8px 10px;padding:12px 0;min-height:0;align-items:start;
  }
  body:is([data-page="account-monitors"],[data-page="account-dashboard"]) .acct-row > .mon-st{
    grid-column:1;grid-row:1;margin-top:7px;
  }
  body:is([data-page="account-monitors"],[data-page="account-dashboard"]) .acct-row > .acct-main{
    grid-column:2;grid-row:1;min-width:0;
  }
  body:is([data-page="account-monitors"],[data-page="account-dashboard"]) .acct-row > .tag{
    grid-column:3;grid-row:1;justify-self:end;
  }
  body:is([data-page="account-monitors"],[data-page="account-dashboard"]) .acct-row > .acct-acts{
    grid-column:1/-1;grid-row:2;justify-content:flex-start;gap:8px;flex-wrap:wrap;
  }
  body:is([data-page="account-monitors"],[data-page="account-dashboard"]) .acct-row .acct-t{
    white-space:normal;overflow-wrap:anywhere;
  }
  body:is([data-page="account-monitors"],[data-page="account-dashboard"]) .acct-row .acct-d{
    white-space:normal;line-height:1.6;
  }
  body:is([data-page="account-monitors"],[data-page="account-dashboard"]) .acct-row .acct-acts button{
    min-width:44px;min-height:44px;padding:0 14px;border-radius:999px;
    background:var(--wash);box-shadow:inset 0 0 0 1px var(--line);
    font-size:var(--t-sm);color:var(--t1);
  }
  body:is([data-page="account-monitors"],[data-page="account-dashboard"]) .acct-row .acct-acts button.is-red{
    color:var(--red);
  }
  /* 监控页顶部分段与刷新按钮 */
  body[data-page="account-monitors"] .u-row-b{flex-wrap:wrap;gap:10px}
  body[data-page="account-monitors"] .seg{display:flex;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;width:100%}
  body[data-page="account-monitors"] .seg::-webkit-scrollbar{display:none}
  body[data-page="account-monitors"] .seg button{flex:0 0 auto;border-radius:999px;background:var(--card);box-shadow:inset 0 0 0 1px var(--line)}
  body[data-page="account-monitors"] .seg button[aria-pressed="true"]{background:var(--blue);color:var(--on-blue);box-shadow:none}
  body[data-page="account-monitors"] [data-act="refresh"]{width:100%;min-height:52px}
  /* 近期报告：与桌面一致的完整表格，容器横滑 */
  body[data-page="account-monitors"] [data-list="reports"]{
    overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;max-width:100%;
  }
  body[data-page="account-monitors"] [data-list="reports"] table.tbl{min-width:520px}
  /* 新建任务抽屉：与 monitor-new 同一套单列规格 */
  body[data-page="account-monitors"] .monitor-drawer .monitor-form-grid,
  body[data-page="account-monitor-new"] .monitor-form-grid{
    grid-template-columns:minmax(0,1fr);gap:14px;
  }
  body[data-page="account-monitors"] .monitor-drawer .drawer-ft,
  body[data-page="account-monitor-new"] .monitor-form-ft{
    flex-direction:column;gap:10px;width:100%;
  }
  body[data-page="account-monitors"] .monitor-drawer .drawer-ft .btn,
  body[data-page="account-monitor-new"] .monitor-form-ft .btn{
    width:100%;min-height:52px;height:52px;font-size:var(--t-lead);
  }
  /* 选择器好点：整行 48px、字号 16px、原生箭头保留 */
  body[data-page="account-monitor-new"] .monitor-form-grid .select,
  body[data-page="account-monitors"] .monitor-drawer .select,
  body[data-page="account-dashboard"] .select{
    width:100%;min-height:48px;height:48px;font-size:var(--t-lead);
  }
  body[data-page="account-monitor-new"] .monitor-check-row,
  body[data-page="account-monitors"] .monitor-check-row{
    min-height:56px;align-items:center;padding:14px;
  }
  body[data-page="account-monitor-new"] .monitor-create-hd,
  body[data-page="account-monitors"] .monitor-create-hd{flex-direction:column;align-items:flex-start;gap:6px}
  body[data-page="account-monitor-new"] .monitor-create-hd .tag,
  body[data-page="account-monitors"] .monitor-create-hd .tag{max-width:none;text-align:left}

  /* ================= M1-304 后台：与桌面信息一致 + 容器级横滑 =================
     口径：不删列、不折叠成卡片、不改信息内容，只给容器 overflow-x:auto。
     横滑只在容器内（overscroll-behavior-x:contain），文档级横向溢出恒为 0。 */
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) .table-scroll,
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) .vip-table-wrap,
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) .panel.u-flush{
    overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;max-width:100%;
  }
  /* 表格保持 table 语义与全部列：不被任何窄屏规则改成卡片或隐藏列 */
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) table.tbl{
    display:table;width:100%;
  }
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) table.tbl thead,
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) table.tbl tbody,
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) table.tbl tr{
    display:table-row-group;
  }
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) table.tbl thead{
    display:table-header-group;
  }
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) table.tbl tbody{
    display:table-row-group;
  }
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) table.tbl tr{
    display:table-row;
  }
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) table.tbl th,
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) table.tbl td{
    display:table-cell;
  }
  /* 窄屏最小宽度：列不被压扁，多出来的宽度交给容器横滑 */
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) .table-scroll > table.tbl,
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) .vip-table-wrap > table.tbl{min-width:max-content}
  /* 行内操作按钮：触控 ≥44px，必要时换行堆叠 */
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) .tbl .acts-cell,
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) .vip-row-actions{
    flex-wrap:wrap;gap:8px;justify-content:flex-start;
  }
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) .tbl .btn,
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) .tbl button{
    min-height:44px;min-width:44px;padding-left:12px;padding-right:12px;
  }
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) .dash-grid{grid-template-columns:minmax(0,1fr)}
  body:is([data-page="admin"],[data-page="admin-users"],[data-page="admin-vip"],[data-page="admin-db"],[data-page="ops-wechat"]) .wx-log-list.is-open{max-height:220px}

  /* ================= M1-305 空态 / 加载态 / 错误态统一 ================= */
  body:not([data-mb-native]) .hub-state,
  body:not([data-mb-native]) .dash-state,
  body:not([data-mb-native]) .dash-empty,
  body:not([data-mb-native]) .acct-mail-empty{
    flex-wrap:wrap;gap:10px 12px;
    padding:14px;border-radius:var(--r-m);
    font-size:var(--t-sm);line-height:1.7;
  }
  body:not([data-mb-native]) .hub-state > b{
    flex:0 0 auto;width:26px;height:26px;
    font-size:var(--t-xs);line-height:24px;text-align:center;
  }
  body:not([data-mb-native]) .hub-state > span{flex:1 1 100%;min-width:0}
  body:not([data-mb-native]) .hub-state.is-loading > b{animation:mb-spin 900ms linear infinite}
  /* 错误态必须给出可点的「重试」 */
  body:not([data-mb-native]) .hub-retry,
  body:not([data-mb-native]) .dash-state .btn,
  body:not([data-mb-native]) .dash-empty .btn{
    min-height:44px;min-width:44px;padding:0 16px;border-radius:999px;
    display:inline-flex;align-items:center;justify-content:center;
    background:var(--card);box-shadow:inset 0 0 0 1px var(--line);
    color:var(--blue);font-size:var(--t-sm);font-weight:500;
  }
  body:not([data-mb-native]) .dash-state,
  body:not([data-mb-native]) .dash-empty{min-height:88px;justify-content:center}

  /* ================= M1-308 手机端性能 =================
     动画只用 transform / opacity；尊重系统「减少动态效果」 */
  body:not([data-mb-native]) .hub-state.is-loading > b,
  body:not([data-mb-native]) .st-spin,
  body:not([data-mb-native]) [class*="skeleton"]{will-change:transform}
}

/* 加载态 spinner：只转 transform，不触发重排 */
@keyframes mb-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}
}

/* M1-301 补充：正文里的行内文字链接（数据源、公告链接…）在手机上把命中区撑到 ≥44px。
   inline 元素的纵向 padding 不改变行高，只扩大可点区域（与上面 ::after 兜底叠加）。 */
@media (max-width:768px){
  body:not([data-mb-native]) p a,
  body:not([data-mb-native]) .src-note a,
  body:not([data-mb-native]) .note a,
  body:not([data-mb-native]) .hint a,
  body:not([data-mb-native]) .sub a{
    padding-top:13px;padding-bottom:13px;
  }
}

/* ================= M1-307 深色主题手机端对比度 =================
   深色卡片底（--card）上，排行榜「RP 金色数值」用 --tier-gold 只有 3.01:1，
   「第 2 名银徽章」白字压银底只有 4.19:1，均低于 4.5:1。这里只在手机端深色主题下换色，
   桌面端与浅色主题口径不变。 */
@media (max-width:768px){
  [data-theme="dark"] .rank-tbl tbody td.is-rp{color:var(--warn)}
  [data-theme="dark"] .rk-badge.is-2{color:var(--bg)}
}
/* R8-E：上面两条原本只在手机端生效，桌面深色仍是 3.01:1 / 4.19:1。
   深浅主题是用户显式选择的，桌面端同样需要可读，故去掉宽度限制（作用条件仍是深色）。 */
[data-theme="dark"] .rank-tbl tbody td.is-rp{color:var(--warn)}
[data-theme="dark"] .rk-badge.is-2{color:var(--bg);background:var(--rk-2)}

/* M1-307 续：排行榜说明卡标题用了 --blue-deep-2，深底上只有 2.16:1；
   手机端深色主题下改用可读的 --blue（5.39:1）。桌面端与浅色主题不变。 */
@media (max-width:768px){
  [data-theme="dark"] .rank-note h2,
  [data-theme="dark"] .rank-note h3{color:var(--blue)}
}
/* R8-E：同上——桌面端深色说明卡标题 2.16:1，一并提到 --blue-lt（浅蓝在深底上 ≈7:1）。 */
[data-theme="dark"] .rank-note h2,
[data-theme="dark"] .rank-note h3{color:var(--blue-lt)}
/* R8-E：表头排序按钮当前列 --blue-deep-1 在深底上 3.62:1，改用 --blue-lt */
[data-theme="dark"] .rank-tbl thead th.is-sort .th-btn{color:var(--blue-lt)}
[data-theme="dark"] .rank-tbl thead th.is-sort .th-btn svg{stroke:var(--blue-lt)}
/* R8-E：银徽章深浅都差一点（浅色白字 4.19:1、深色墨字 3.25:1）。调底不调字：
   浅色把银底压深（白字 ≈5.9:1），深色把银底提亮（墨字 7.2:1），金银铜语义不变。 */
[data-theme="light"] .rk-badge.is-2{background:var(--rk-2-d)}

/* ================= M1-306 横屏手机 =================
   844×390 一类横屏手机：宽度 >768（走桌面版式）但高度 ≤500（手指操作）。
   这里只补「触控尺寸 / 输入字号 / 安全区」，不动版式；桌面（高 ≥600）不受影响。
   版式实测：18 页 documentElement.scrollWidth - clientWidth = 0，无卡片畸形。 */
@media (min-width:769px) and (max-width:920px) and (max-height:500px){
  a[href],button,select,textarea,summary,
  [role="button"],[role="tab"],[data-act],[data-go],[data-tab],[data-seg],
  .nav a,.btn,.btn-sm,.chip,.tab,.seg button,.ic-btn,.i-btn,.tool,.pager button,.pager a,
  .ft-links a,.ft-links button,.crumb a,.logo,.more,.th-btn,.hd-pill,.tbl .btn,.tbl button{
    min-height:44px!important;min-width:44px!important;  /* important-ok: 触控热区下限 44px，需压模块内归零 */
  }
  input.input,
  input[type="text"],input[type="search"],input[type="email"],input[type="password"],
  input[type="number"],input[type="tel"],
  select.select,select,textarea{
    min-height:48px;height:48px;font-size:var(--t-lead);
  }
  /* 横屏圆角 / 刘海：左右留安全区，底部给主页指示器留位 */
  body:not([data-mb-native]) .hd-in,
  body:not([data-mb-native]) .main,
  body:not([data-mb-native]) .ft-in{
    padding-left:calc(var(--pad) + env(safe-area-inset-left,0px));
    padding-right:calc(var(--pad) + env(safe-area-inset-right,0px));
  }
  body:not([data-mb-native]){padding-bottom:calc(10px + env(safe-area-inset-bottom,0px))}
}

/* M1-306 续：横屏手机下正文行内链接同样把命中区撑到 ≥44px */
@media (min-width:769px) and (max-width:920px) and (max-height:500px){
  body:not([data-mb-native]) p a,
  body:not([data-mb-native]) .src-note a,
  body:not([data-mb-native]) .note a,
  body:not([data-mb-native]) .hint a,
  body:not([data-mb-native]) .sub a{padding-top:16px;padding-bottom:16px}
}

/* M1-306：768~1024 宽（折叠屏 / 小平板竖屏）下页头导航链接实测 48×37，
   补到 44px 命中区（纵向 padding 不改变版式）。 */
@media (max-width:768px){
  body:not([data-mb-native]) .nav a,
  body:not([data-mb-native]) .hd nav a,
  body:not([data-mb-native]) .hd-nav a{
    min-height:44px;display:inline-flex;align-items:center;padding-top:4px;padding-bottom:4px;
  }
}

/* M1-306：搜索框里的「时钟 / 清空」圆钮在 768 宽下仍是 40×40，补到 44×44 */
@media (max-width:768px){
  body:not([data-mb-native]) form.search .sb-clock,
  body:not([data-mb-native]) form.search .sb-x{
    width:44px;height:44px;min-width:44px;min-height:44px;
  }
}

/* R8-C：iOS Safari 在可输入控件字号 <16px 时会自动放大整页，
   手机端把多行输入统一提到 16px（单行 input 已是 16px）。 */
@media (max-width:768px){
  textarea.input,textarea{font-size:var(--m-fs-16)}
}

/* ================= R8-G 手机端筛选吸顶 =================
   武器 88 张卡 / 物品图鉴 / 榜单切区服，换筛选要划回页面顶部很累。
   手机端让筛选条吸在顶部：不透明底 + 1px 分隔线，避免内容透出；
   只吸筛选条本身（不是整块 154px 的分类盘），不遮挡信息。 */
@media (max-width:768px){
  body[data-page="arsenal-weapons"] .modtabs,
  body[data-page="arsenal-catalog"] .modtabs{
    position:sticky;top:0;z-index:30;
    background:var(--bg);
    padding-top:8px;padding-bottom:8px;
    box-shadow:0 1px 0 var(--line);
  }
}

/* ================= R8-G 回到顶部 =================
   48×48 触控区，压在 tab 栏之上并计入底部安全区；滚过 600px 才淡入，
   按压反馈是「底色 + 下沉 1px」，全站统一不用 scale 放大。 */
/* R9-002：桌面档必须彻底隐藏。此前样式全在 @media(max-width:768px) 内，
   宽屏下按钮打回原生 button + svg 默认尺寸，渲染成 1440×1449 的黑色巨块
   （首页底部那座「黑色三角形」就是它）。基样式先关死，手机端再打开。 */
.mb-top{display:none}
.mb-top svg{width:20px;height:20px}
@media (max-width:768px){
  .mb-top{
    position:fixed;z-index:60;right:14px;
    bottom:calc(72px + env(safe-area-inset-bottom,0px));
    width:48px;height:48px;border-radius:999px;
    display:flex;align-items:center;justify-content:center;
    background:var(--card);color:var(--t1);
    border:1px solid var(--line);box-shadow:var(--sh-2);
    -webkit-tap-highlight-color:transparent;touch-action:manipulation;
    opacity:0;visibility:hidden;transform:translateY(8px);
    transition:opacity .18s ease,transform .18s ease,background .18s ease;
  }
  .mb-top.is-on{opacity:1;visibility:visible;transform:none}
  .mb-top svg{width:20px;height:20px;stroke:currentColor;stroke-width:2;fill:none}
  .mb-top:active{background:var(--wash);transform:translateY(1px)}
}
.m-icp{margin:18px 16px calc(14px + env(safe-area-inset-bottom,0px));text-align:center;font-size:var(--t-xs);color:var(--t2)}
.m-icp a{color:var(--t2);text-decoration:none}
body:has(.mb-tabbar) .m-icp{margin-bottom:calc(var(--mb-tabbar-h) + 16px)}
.m-icp-ps{opacity:.85}
.m-icp .m-icp-gongan{display:inline-flex;align-items:center;gap:3px;color:inherit;text-decoration:none}
.m-icp .m-icp-gongan img{width:14px;height:16px;object-fit:contain}

/* ==================================================================
   站内公告（小喇叭）：.mb-hd 右侧铃铛 + 顶部公告条
   ================================================================== */
.mb-hd .mb-bell{
  margin-left:auto;flex-shrink:0;
  width:36px;height:36px;border-radius:999px;
  border:1px solid var(--mb-line);background:var(--mb-card);color:var(--mb-t2);
  position:relative;display:inline-flex;align-items:center;justify-content:center;
  padding:0;cursor:pointer;
}
.mb-hd .mb-bell svg{width:19px;height:19px;display:block}
.mb-hd .mb-bell-dot{
  position:absolute;top:5px;right:5px;width:7px;height:7px;border-radius:999px;
  background:var(--mb-red, var(--red));
  opacity:0;transform:scale(.4);transition:opacity .15s,transform .15s;
}
.mb-hd .mb-bell-dot.is-on{opacity:1;transform:scale(1)}
.mb-notice{
  position:fixed;left:0;right:0;top:0;z-index:1200;
  transform:translateY(calc(-100% - 40px));visibility:hidden;
  transition:transform .25s ease,visibility .25s;
  pointer-events:none;
}
.mb-notice.is-on{transform:translateY(0);visibility:visible;pointer-events:auto}
.mb-notice-in{
  margin:0 8px;background:var(--mb-card,var(--card));
  border:1px solid var(--mb-line,var(--line));border-top:none;
  border-radius:0 0 var(--r-s) var(--r-s);
  padding:12px 14px 14px;display:grid;gap:6px;
}
.mb-notice-head{display:flex;align-items:baseline;gap:8px;min-width:0}
.mb-notice-date{font-size:12px;color:var(--mb-t2,var(--t2));white-space:nowrap}
.mb-notice-title{font-size:15px;font-weight:600;color:var(--mb-ink,var(--ink));min-width:0;overflow-wrap:anywhere}
.mb-notice-close{
  margin-left:auto;flex-shrink:0;width:28px;height:28px;border-radius:var(--r-s);
  border:none;background:transparent;color:var(--mb-t2,var(--t2));cursor:pointer;font-size:17px;line-height:1;
}
.mb-notice-body{margin:0;font-size:14px;color:var(--mb-t2,var(--t2));line-height:1.6;overflow-wrap:anywhere}
.mb-notice-acts{display:flex;justify-content:flex-end}
.mb-notice-read{
  border:none;border-radius:999px;padding:7px 16px;cursor:pointer;
  background:var(--mb-blue,var(--blue));color:#fff;font-size:13px;font-weight:500;
}
