/* ================================================================
   VBLDAO·自由女神 主样式表 —— 2026-10-31 由 index.html 内联 <style> 块原序外置
   整理原则：规则内容与顺序与整理前逐字节一致，仅分类归档，未改任何选择器/属性
   ----------------------------------------------------------------
   第一部分 · 基础与全局
   重置与根变量 / 明暗主题 / 输入控件配色 / 顶部导航与网络切换条 / 汉堡键
   / 顶部 TAB / 驾驶舱表单与卡片 / 数据总览 / 走势图卡片 / 用户目录与团队树
   / 记录列表 / 链不匹配提示 / 钱包选择弹窗 / 身份卡与双卡布局 / 手机端统一规则
   ================================================================ */
  *{box-sizing:border-box;margin:0;padding:0}
  /* 输入控件默认配色：不设 color 时浏览器给的是黑色，深色主题下会看不见 */
  input,select,textarea{color:var(--c-ink)}
  input:not([type=checkbox]):not([type=radio]):not([type=range]),
  select,textarea{background-color:var(--c-surface)}
  input::placeholder,textarea::placeholder{color:var(--c-muted)}
  /* 下拉展开后的选项列表「部分浏览器用系统色」 */
  select option{background-color:var(--c-surface);color:var(--c-ink)}
  html{-webkit-text-size-adjust:100%}
  body{background:var(--c-bg);color:var(--c-ink);font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;line-height:1.85;font-size:15px}
  .wrap{max-width:1200px;margin:0 auto;padding:0 20px}
  header{padding:48px 0 10px}
  .kicker{font-size:12px;letter-spacing:3px;color:var(--c-accent)}
  h1{font-family:Georgia,"Songti SC","SimSun",serif;font-size:27px;font-weight:600;margin:8px 0 6px;line-height:1.45}
  .meta{color:var(--c-muted);font-size:13px}
  hr.rule{border:none;border-top:1px solid var(--c-line2);margin:22px 0}
  nav{position:sticky;top:0;background:var(--c-bg);z-index:9;border-bottom:1px solid var(--c-line2);padding:8px 0}
  nav a{color:var(--c-ink2);text-decoration:none;font-size:13px;margin-right:14px;white-space:nowrap}
  nav a:hover{color:var(--c-accent)}
  section{padding:26px 0 4px}
  .no{font-family:Georgia,serif;font-size:13px;color:var(--c-muted2);letter-spacing:2px}
  h2{font-family:Georgia,"Songti SC","SimSun",serif;font-size:20px;font-weight:600;margin:4px 0 12px}
  h3{font-size:15px;font-weight:600;margin:16px 0 4px}
  p{margin:0 0 11px}
  table{width:100%;border-collapse:collapse;margin:12px 0;font-size:13.5px;table-layout:auto}
  th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--c-line2);vertical-align:top;line-height:1.7}
  th{font-weight:600;color:var(--c-ink2);background:var(--c-soft);white-space:nowrap}
  tbody tr:nth-child(even){background:var(--c-soft)}
  td:first-child,th:first-child{white-space:nowrap}
  .tblwrap table{min-width:660px}
  .tblwrap{overflow-x:auto;border:1px solid var(--c-line2);border-radius:5px;background:var(--c-surface)}
  .tblwrap table{margin:0}
  .ok{color:var(--c-ok);font-weight:600}
  .todo{color:var(--c-danger);font-weight:600}
  .st{font-size:12px;border:1px solid currentColor;border-radius:5px;padding:0 5px;white-space:nowrap}
  #s1 td:first-child{width:56px;font-family:Georgia,serif;color:var(--c-accent)}
  #s1 td:last-child{white-space:nowrap}
  #s1 td:nth-child(2){min-width:280px}
  .note{background:var(--c-soft);border-left:3px solid var(--c-accent);padding:11px 15px;font-size:14px;color:var(--c-ink3);margin:14px 0}
  /* 醒目条：重要结论「客户重点看」 */
  .answer{border:2px solid var(--c-ok);background:var(--c-ok-bg);border-radius:5px;padding:16px 18px;margin:16px 0}
  .answer .tag{display:inline-block;background:var(--c-ok);color:#fff;font-size:12px;font-weight:700;border-radius:5px;padding:3px 10px;margin-bottom:10px;letter-spacing:1px}
  .answer h4{margin:0 0 8px;font-size:16px;font-weight:700;color:var(--c-ok)}
  .answer table{margin:10px 0 4px;font-size:13px}
  .answer .big{font-family:Georgia,serif;font-size:22px;font-weight:700;color:var(--c-ok)}
  @media(max-width:640px){ .answer{padding:13px 14px} .answer .big{font-size:19px} }
  .risk{border:1px solid var(--c-line);background:var(--c-soft);padding:16px 18px;margin:14px 0}
  footer{padding:40px 0 56px;color:var(--c-muted);font-size:13px}
  #lock{position:fixed;inset:0;background:var(--c-bg);z-index:50;display:flex;align-items:center;justify-content:center;text-align:center}
  #lock .card{max-width:360px;padding:40px 30px}
  #lock h2{font-size:19px;margin:12px 0 8px}
  #lock p{color:var(--c-ink2);font-size:14px}
  #lock .rebtn{margin-top:14px;display:block;width:100%;background:var(--c-btn);color:var(--c-btn-ink);border:none;padding:10px 16px;font-size:13px;border-radius:5px;cursor:pointer}
  #lock button{margin-top:0px;background:#f7941e;color:#1c1b18;font-weight:700;border:none;padding:11px 26px;font-size:14px;border-radius:5px;cursor:pointer;width:100%}
  #lock select{margin-top:16px;width:100%;padding:10px 12px;font-size:14px;border:1px solid var(--c-line);border-radius:5px;background:var(--c-surface);color:var(--c-ink)}
  #lock .re{margin-top:12px;font-size:13px;color:var(--c-accent);cursor:pointer;text-decoration:underline}
  #lock .err{color:var(--c-danger);font-size:13px;margin-top:14px;min-height:20px}
  #compPage input{width:100%;padding:11px 13px;font-size:14px;border:1px solid var(--c-line);border-radius:5px;background:var(--c-surface);color:var(--c-ink);font-family:Consolas,monospace}
  #compPage .btn{margin-top:12px;background:var(--c-btn);color:var(--c-btn-ink);border:none;padding:11px 26px;font-size:14px;border-radius:5px;cursor:pointer}
  #compPage .re{font-size:13px;color:var(--c-accent);cursor:pointer;text-decoration:underline}
  #compPage .err{color:var(--c-danger);font-size:13px;margin-top:10px;min-height:18px}
  #compPage .big{font-family:Georgia,serif;font-size:24px;font-weight:600;margin:6px 0}
  #compPage .sub{color:var(--c-muted);font-size:13px}
  /* 补偿页说明卡：浅色米底暖字、深色加深底浅字，避免正文直接贴纯黑/纯白 */
  .intro-note{background:var(--c-soft);border:1px solid var(--c-line2);border-left:3px solid var(--c-accent);
    border-radius:5px;padding:11px 15px;margin:10px 0 2px;color:var(--c-ink3);font-size:13px;line-height:1.9;
    letter-spacing:.2px;text-align:left}
  html.dark .intro-note{background:rgba(255,144,54,.06);border-color:rgba(255,144,54,.22);
    border-left-color:var(--c-accent);color:var(--c-ink2)}
  /* ==================== 明暗主题 ==================== */
  /* 浅色 = 原来的米色纸面；深色 = 对应 XOL 的暗色纸面「同一套变量名，只换值」 */
  :root{
    --c-bg:#f7f6f3; --c-surface:#fffdf9; --c-ink:#26241f; --c-ink-hover:#3a372f;
    --c-ink2:#6b6558; --c-ink3:#4a463d; --c-muted:#8b857a; --c-muted2:#a39d8e;
    --c-line:#c9c3b4; --c-line2:#e5e1d5; --c-soft:#f1ede3;
    --c-accent:#8a5a2b; --c-danger:#a24d2e; --c-ok:#2e6b46;
    --c-gold:#7a5a1c; --c-gold-line:#e8c979;
    --c-gold-bg:#fbf1cf; --c-ok-bg:#f4faf6; --c-danger-bg:#fdf0ec;
    --c-rl0:#f1ede3; --c-rl1:#fdf3cf; --c-rl2:#fce4c8; --c-rl3:#f9d9d2; --c-rl4:#f2c7bd; --c-rlS:#f6f5f0;
    --c-glow:rgba(255,144,54,0);
    /* 主按钮「原「墨底纸字」」——深色下换成橙色，避免变成一大块白 */
    --c-btn:#26241f; --c-btn-ink:#f7f6f3;
    /* 成功态按钮「已导入」：浅色用深绿配白字 */
    --c-ok-ink:#ffffff;
  }
  html.dark{
    --c-bg:#0e0a07; --c-surface:#151009; --c-ink:#f2ece6; --c-ink-hover:#ffb877;
    --c-ink2:#c6bbae; --c-ink3:#ded4c8; --c-muted:#a89c92; --c-muted2:#9a9088;
    --c-line:rgba(255,144,54,.34); --c-line2:rgba(255,144,54,.16); --c-soft:#1c1610;
    --c-accent:#ff9036; --c-danger:#ff7a5c; --c-ok:#39d98a;
    --c-gold:#e8c979; --c-gold-line:rgba(232,201,121,.45);
    --c-gold-bg:rgba(232,201,121,.10); --c-ok-bg:rgba(57,217,138,.10);
    --c-danger-bg:rgba(238,52,59,.12);
    --c-rl0:rgba(255,255,255,.04); --c-rl1:rgba(232,201,121,.13); --c-rl2:rgba(255,144,54,.15); --c-rl3:rgba(238,52,59,.14); --c-rl4:rgba(238,52,59,.25); --c-rlS:rgba(255,255,255,.05);
    --c-glow:rgba(255,144,54,.10);
    --c-btn:#ff9036; --c-btn-ink:#17100a;
    /* 成功态按钮「已导入」：深色下绿色偏亮，配深色字保证对比度 */
    --c-ok-ink:#0e0a07;
  }
  /* 深色主题：页面底色带一点橙色辉光「与 XOL 同款氛围」 */
  html.dark body{
    background-color:var(--c-bg);
    background-image:
      radial-gradient(1000px 520px at 50% -12%, rgba(255,144,54,.10), transparent 60%),
      radial-gradient(760px 420px at 100% 0%, rgba(255,144,54,.06), transparent 55%);
    background-attachment:fixed;
  }
  /* 深色主题下：选中态 / 主按钮统一用橙色，文字必须用深色「否则橙底浅字看不清」
     注意：这一组选择器只能配 color:var(--c-btn-ink)，绝不能和「未选中」规则混在一个声明块里 */
  html.dark .tabbtn.active,
  html.dark .vbtn.primary,
  html.dark #vanityPage .vbtn.primary,
  html.dark #disPage .mode-tab.active,
  html.dark #disPage .mode-tab.active:hover,
  html.dark #disPage .badge{color:var(--c-btn-ink)}
  /* 深色下未选中的多签页签 / 步骤条：用亮一档的次要色，别糊在背景里「独立成块」 */
  html.dark #disPage .mode-tab:not(.active){color:var(--c-ink2)}
  html.dark .vbtn.primary:hover{background:#ffa359 !important;border-color:#ffa359 !important;color:#17100a !important}
  /* 门禁页入口按钮：深色下不要一块大白，改成描边卡片 */
  html.dark #lock .rebtn{background:var(--c-surface);color:var(--c-accent);
    border:1px solid var(--c-line);box-shadow:none}
  html.dark #lock .rebtn:hover{border-color:var(--c-accent)}
  /* 测试网 / 正式网：深色下同样绿底 #2e6b46 + 白字「覆盖上面的橙/棕」 */
  html.dark .netbar .netbtn.on{background:#2e6b46;border-color:#2e6b46;color:#fff}
  html.dark .netbar .netbtn.on.test{background:#2e6b46;border-color:#2e6b46;color:#fff}
  html.dark .netbar .netbtn.on:hover{background:#357a51;border-color:#357a51;color:#fff}
  html.dark .gconnect{background:#f7941e;color:#1c1b18}
  html.dark .gconnect:hover{background:#f9a338}

  /* 顶栏主题切换按钮「对齐 XOL：38×38 · 圆角 12 · 图标 19px」 */
  .theme-btn{width:40px;height:40px;box-sizing:border-box;padding:0;flex:none;
    border-radius:5px;display:inline-flex;align-items:center;justify-content:center;
    color:var(--c-accent);border:1px solid var(--c-line);background:var(--c-surface);
    cursor:pointer;transition:border-color .15s,color .15s,background .15s}
  .theme-btn:hover{border-color:var(--c-accent);color:var(--c-accent)}
  .theme-btn svg{width:20px;height:20px}

  /* 顶部条：标签 + 网络切换同一行「PC」 */
  #topBar{position:sticky;top:0;z-index:60;display:flex;align-items:center;gap:14px;
          padding:12px max(10px,calc((100% - 1100px)/2));background:var(--c-bg);border-bottom:1px solid var(--c-line2)}
  /* TAB 只占内容宽度，网络开关紧跟在最后一个 TAB 后面「业务方 2026-10-25 定」 */
  /* 顶栏标签默认整条隐藏，连点背景色 10 次才出现 */
  #tabBar{display:none;gap:10px;flex:0 1 auto;min-width:0}
  html.showtabs #tabBar{display:flex}
  #tabBar .tabbtn{flex:1 1 0;min-width:0}

  /* 中等宽度「901–1180」：6 个 TAB + 网络条同行，先收字号 */
  @media (min-width:901px) and (max-width:1180px){
    #tabBar{gap:8px}
    #tabBar .tabbtn{padding:0 8px;font-size:13.5px}
    .netbar{gap:8px}
    .netbar .netbtn,.netbar .gconnect{font-size:13.5px;padding:0 12px}
  }
  /* 窄桌面「641–900」：再收一档，保证 6 个按钮仍单行不折字 */
  @media (min-width:641px) and (max-width:900px){
    #tabBar{gap:6px}
    #tabBar .tabbtn{padding:0 5px;font-size:12.5px;letter-spacing:-.2px}
    .netbar{gap:6px}
    .netbar .netbtn,.netbar .gconnect{font-size:12.5px;padding:0 8px;gap:4px}
    .netbar .gconnect svg{width:14px;height:14px}
  }
  /* 顶部 TAB 是 sticky：切换页面时留出高度，标题不被遮住 */
  section.wrap{scroll-margin-top:76px}
  #dashPage, #statsPage{padding-bottom:104px}   /* 团队查询/数据总览底部预留空间（避开左下刷新悬浮钮，2026-10-28 用户两轮加大） */
  @media(max-width:640px){ section.wrap{scroll-margin-top:118px} }
  /* 顶部三个控件「TAB / 网络 / 钱包」统一高度 40px，视觉齐平 */
  .tabbtn{font-family:Georgia,"Songti SC","SimSun",serif;font-size:15px;height:40px;box-sizing:border-box;
          display:inline-flex;align-items:center;justify-content:center;
          white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
          padding:0 14px;border:1px solid var(--c-line);border-radius:5px;background:var(--c-surface);color:var(--c-ink2);cursor:pointer}
  .tabbtn.active{background:var(--c-btn);color:var(--c-btn-ink);border-color:var(--c-btn);font-weight:600}
  @keyframes tabpulse{50%{box-shadow:0 0 0 5px rgba(138,90,43,.30)}}
  .tabbtn.reveal{animation:tabpulse 1s ease 2;border-color:var(--c-accent);color:var(--c-accent)}
  .netbtn.reveal{animation:tabpulse 1s ease 2;border-color:var(--c-accent);color:var(--c-accent)}
  /* ===== 网络切换条「测试网 / 正式网 / 连接钱包」—— 与 TAB 同高同字号 ===== */
  .netbar{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex:none;flex-wrap:nowrap;margin-left:auto}
  /* 顶栏右侧这一组「网络 / 钱包 / 背景色」必须连成一片、右边缘齐平 */
  #netBar .wbtn{margin-left:0}
  .netbar .netbtn{font-family:inherit;font-size:15px;font-weight:600;height:40px;box-sizing:border-box;
                  padding:0 18px;border-radius:5px;white-space:nowrap;
                  border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink2);cursor:pointer}
  .netbar .netbtn:hover{border-color:var(--c-accent);color:var(--c-accent)}
  /* 测试网 / 正式网：选中态统一绿底 #2e6b46 + 白字「2026-10-20 业务方指定」 */
  .netbar .netbtn.on{background:#2e6b46;border-color:#2e6b46;color:#fff}
  .netbar .netbtn.on.test{background:#2e6b46;border-color:#2e6b46;color:#fff}
  .netbar .netbtn.on:hover{background:#357a51;border-color:#357a51;color:#fff}
  .netbar .netcfg{display:none}
  /* 顶部条里的全站钱包按钮：与 TAB 同高同字号，橙色实心 */
  .netbar .gconnect{flex:none;margin-left:0;height:40px;box-sizing:border-box;
                    padding:0 18px;font-size:15px;gap:7px;border-radius:5px}
  .netbar .gconnect svg{width:16px;height:16px}

  /* ===== 汉堡键「仅手机端显示」 ===== */
  .burger{display:none;flex:none;width:40px;height:40px;box-sizing:border-box;padding:0;
          color:var(--c-ink2);
          border:1px solid var(--c-line);border-radius:5px;background:var(--c-surface);cursor:pointer;
          align-items:center;justify-content:center;flex-direction:column;gap:4px}
  .burger span{display:block;width:18px;height:2px;border-radius:5px;background:var(--c-ink2);transition:transform .18s,opacity .18s}
  .burger.open span:nth-child(1){transform:translateY(6px) rotate(45deg)}
  .burger.open span:nth-child(2){opacity:0}
  .burger.open span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}

  @media(max-width:640px){
    #topBar{display:block;padding:8px 8px 8px}
    /* TAB 收进汉堡：默认隐藏，点汉堡后从顶栏下方展开 */
    html.showtabs #tabBar{display:none}
    #tabBar{display:none;position:absolute;left:8px;right:8px;top:calc(100% - 4px);z-index:70;
            grid-template-columns:repeat(6,minmax(0,1fr));gap:6px;padding:8px;
            background:var(--c-bg);border:1px solid var(--c-line2);border-radius:5px;
            box-shadow:0 16px 40px rgba(0,0,0,.18)}
    #tabBar.open{display:grid}
    html.showtabs #tabBar.open{display:grid}
    #tabDash, #tabDis, #tabVanity { grid-column: span 2; }
    #tabStats, #tabDisperse { grid-column: span 3; }
    /* 网络 + 钱包 + 汉堡：四格等分拉伸 */
    /* 测试网 / 正式网 按文字自适应收窄；连接钱包吃掉剩余全部宽度；主题 / 汉堡固定 40px */
    /* 网络 / 钱包 / 主题 / 汉堡：按内容宽度排布，整组靠右齐平「钱包不再被拉伸」 */
    /* 网络 / 钱包 / 主题 / 汉堡：整行拉伸铺满 */
    /* 手机端顶栏：可见的按钮等分铺满整行「隐藏的测试网/汉堡不占位」 */
    .netbar{display:flex;align-items:center;gap:6px;margin-top:0;width:100%}
    .netbar .netbtn{flex:1 1 0;min-width:0;width:auto;height:40px;padding:0 6px;font-size:12.5px;letter-spacing:-.2px}
    .netbar .gconnect{flex:1.6 1 0;width:auto;max-width:none;min-width:0;height:40px;padding:0 6px;
                      font-size:12.5px;gap:4px;justify-content:center}
    .netbar .theme-btn,.netbar .burger{flex:0 0 40px}
    .netbar .gconnect svg{width:13px;height:13px}
    .netbar .gconnect .wdot{width:7px;height:7px}
    html:not(.showtabs) .burger{display:none}
    .burger{display:flex;width:40px;height:40px}
    .theme-btn{width:40px;height:40px}
    /* 已连接：地址比「连接钱包」长，再收一档字号 + 去掉字符间距，保证完整显示不被裁切 */
    .netbar .gconnect.on{font-size:12.5px;letter-spacing:-.3px;gap:4px;padding:0 5px}
    .netbar .gconnect #gBtnTxt{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  }
  /* ===== 驾驶舱表单行「电脑/手机统一，自动换行不重叠」 ===== */
  .dinput{display:block;width:100%;box-sizing:border-box;padding:12px 13px;font-size:15px;
          border:1px solid var(--c-line);border-radius:5px;background:var(--c-surface);color:var(--c-ink);
          font-family:Consolas,monospace;margin-top:6px}
  /* 三个按钮：桌面保持内容宽度「不再撑满、不再压扁」 */
  #dashPage .dbtn-green{
    width:auto;min-width:0;display:inline-block;margin-top:0;
    padding:11px 26px;font-size:14px;border-radius:5px;cursor:pointer;white-space:nowrap;
  }
  #dashPage .dbtn-green{background:var(--c-ok);color:#fff;border:none}
  @media(max-width:640px){
    #dashPage .dbtn-green{
      width:100%;display:block;min-height:46px;font-size:15px;padding:12px 10px;
    }
    .dinput{min-height:46px;font-size:16px}
  }

  /* ===== 驾驶舱卡片网格「四宫格：一行 2 个」 ===== */
  /* 查询出结果后：付费面板已收起，那条分隔线、空的报错占位、结果区顶部的 hr 都不该再占高，
     否则手机上查询说明和走势图之间会空出一大片「实测 96px」。 */
  #dashPanel.q-done > hr.rule{display:none}
  #dashPanel.q-done #dashErr:empty{display:none;min-height:0;margin-top:0}
  #dashPanel.q-done #dashCards > hr.rule{margin:0 0 12px}
  .dgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}
  .dcard{border:1px solid var(--c-line2);border-radius:5px;background:var(--c-surface);padding:13px 14px;min-width:0}
  #statsPage .dcard{overflow:hidden}
  .dcard.wide{grid-column:1/-1}
  .dgrid .dcard.half{grid-column:span 1}   /* 5/6 卡：PC 左右并排，手机端全宽「2026-10-28」 */
  .dcard > h3{margin:0 0 9px;font-size:14px;font-weight:700;line-height:1.35;color:var(--c-ink);
              padding:0 0 7px;border:0;border-bottom:1px solid var(--c-line2);white-space:normal}
  .dbody{font-size:13px;line-height:1.7;color:var(--c-ink3);min-width:0}
  .dbody.nopad{padding:0}
  .dbody .sub{font-size:12.5px;line-height:1.7;color:var(--c-muted)}
  .dbody .sub b{color:var(--c-ink);font-size:13.5px}
  /* 统计条：只在项与项之间换行，项内不断行 */
  .dstats{display:flex;flex-wrap:wrap;gap:2px 16px;font-size:12.5px;line-height:1.7;color:var(--c-muted)}
  .dstats > span{white-space:nowrap}
  .dstats b{color:var(--c-ink);font-size:13.5px}
  /* ===== 数据总览卡片：键左值右，一行一条，数值不拆行 ===== */
  .kvs{display:flex;flex-direction:column;gap:3px}
  .kv{display:flex;align-items:baseline;justify-content:space-between;gap:10px;min-width:0}
  .kv > .k{color:var(--c-muted);font-size:12.5px;white-space:nowrap;flex:none}
  .kv > .v{color:var(--c-ink);font-size:13px;text-align:right;white-space:nowrap;min-width:0;
           font-variant-numeric:tabular-nums}
  .kv > .v b{font-weight:700;color:var(--c-ink)}
  .kvnote{margin-top:6px;color:var(--c-muted);font-size:12px;line-height:1.5}
  .kpirow{display:grid;grid-column:1/-1;grid-template-columns:repeat(8,minmax(0,1fr));gap:8px;margin:2px 0 10px}
    .kpicard{background:var(--c-soft);border-radius:8px;padding:10px 10px;min-width:0}
    .kpil{display:block;font-size:12px;color:var(--c-muted)}
    .kpiv{display:block;font-size:22px;font-weight:700;margin-top:2px;color:var(--c-ink);line-height:26px}   /* 统一行盒 26px：所有卡第二行 i 从同一 y 开始 */
    .kpicard .kpiv b{display:inline-block;white-space:nowrap;max-width:100%;overflow:hidden;vertical-align:bottom}   /* 数字不换行：超宽由 fitKpiAll_ 缩字号 */
    .kpicard .kpiv i{display:block;white-space:nowrap;max-width:100%;overflow:hidden;vertical-align:top}   /* 副文字独立成行（BNB/股东/缺口等），超宽仍缩字号 */
    .kpiv i{display:block;font-style:normal;font-size:12px;color:var(--c-muted);font-weight:400;margin-top:3px}
    .kpiv i b{font-weight:400;color:var(--c-muted)}
  .kpiv.kpsm{font-size:13px;margin-top:8px;line-height:1.35}
  .kpiv.kxs{font-size:11px;line-height:26px;margin-top:0}   /* 行盒与 22px 卡等高：「正常」对齐「第1天」、i 行平齐 */
  .kpiv.kpbrk{font-size:15px;margin-top:8px;line-height:1.35}
    .sumrow{display:grid;grid-column:1/-1;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:10px;align-items:start}
    .sumttl{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:2px 0 8px;font-weight:700;font-size:13.5px;color:var(--c-ink)}
    .sumttl-rr{color:var(--c-muted);font-weight:600;font-size:12px;padding-right:2px;display:inline-flex;align-items:center;gap:5px}
    .sumbadge{font-size:11px;border-radius:5px;padding:1px 7px;font-weight:400;background:var(--c-soft);color:var(--c-muted)}
    .sumbadge.ok{background:var(--c-ok-bg);color:var(--c-ok)}
    .sumbadge.bad{background:var(--c-danger-bg);color:var(--c-danger)}
    .kvgrid{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px 14px;font-size:12.5px}
    .kgl{color:var(--c-muted)}
    .kgv{text-align:right;color:var(--c-ink);overflow-wrap:anywhere;word-break:break-word;min-width:0}
    .wmobile{display:none;font-size:11.5px;color:var(--c-ink2);line-height:1.55;margin:0 0 6px;text-align:center}
  .wmobile b{font-weight:700;color:var(--c-ink)}
  .waterbar{position:relative;height:46px;background:var(--c-soft);border-radius:8px;/* overflow: hidden; */margin:2px 0 8px}
  .wz em{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;font-style:normal;font-size:10.5px;line-height:1.45;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.5);text-align:center;font-weight:600}
  .wz em b{font-weight:700}
  .wline{position:absolute;top:0;bottom:0;width:1px;background:rgba(255,255,255,.6);z-index:2}
    .wz{position:absolute;top:0;bottom:0}
  .wz-red{background:#d9534f;border-radius:0 8px 8px 0}
  .wz-amber{background:#e8a13a}
  .wz-g1{background:#3f9e63;border-radius:8px 0 0 8px}
  .wz-g2{background:#7fb569}
  .wz-g3{background:#b3c46e}
  .wz .mini{display:none}
  .waterline.mark{background:#141210;width:3px;z-index:4;box-shadow:0 0 0 1px rgba(255,255,255,.65)}
    .waterline{position:absolute;top:0;bottom:0;width:1px;background:var(--c-line)}
    .waterval{display:none}   /* 当前底池余额与 KPI「合约余额」重复，2026-10-28 全端移除「当前水位位置由 poolMark 标线表达」 */
    .waterpeak{position:absolute;left:8px;top:50%;transform:translateY(-50%);font-size:12px;color:var(--c-ink);background:var(--c-surface);border:0.5px solid var(--c-line);border-radius:5px;padding:1px 7px}
    /* 回升水位条：胶囊浮到条上方，不遮挡第一个色块的文字 */
    .waterbar.wb-above{margin-top:26px}
    .waterpeak.above{top:-22px;transform:none;left:0}
    /* 跟随标线的悬浮余额胶囊：显示当前合约余额，随黑线左右移动 */
    .waterpeak.ride{top:-24px;left:0;transform:translateX(-50%);white-space:nowrap;transition:left .25s ease}
    .waterpeak b{font-weight:400}
  .wg-z1{fill:#16a34a}.wg-z2{fill:#65a30d}.wg-z3{fill:#ca8a04}.wg-z4{fill:#ea580c}.wg-z5{fill:#dc2626}
  .wg-b1{background:#16a34a}.wg-b2{background:#65a30d}.wg-b3{background:#ca8a04}.wg-b4{background:#ea580c}.wg-b5{background:#dc2626}
  .wg-dual{display:block;text-align:center;margin:0 0 4px}
  .wg-pair{display:none}
  .wg-svg{display:block;width:100%;margin:0 auto;overflow:visible}
  .wg-track{fill:none;stroke:var(--c-line,#e5e5e5);opacity:.5}
  .wg-arc{fill:none;stroke-linecap:butt}
  .wg-tk{stroke:var(--c-muted);opacity:.42;stroke-width:1}
  .wg-nl{stroke:var(--c-ink);stroke-linecap:round}
  .wg-hub-o{fill:var(--c-ink)}
  .wg-hub-i{fill:var(--c-surface)}
  .wg-vtxt{font-weight:700;paint-order:stroke;stroke:rgba(0,0,0,.5);stroke-width:.55px}   /* 浅色=黑描边；fill 由 SVG 渐变提供 */
  html.dark .wg-vtxt{stroke:rgba(255,255,255,.9)}   /* 深色=白描边 */
  @keyframes wgflipS{0%{transform:rotateX(90deg);opacity:.15}55%{transform:rotateX(-13deg);opacity:1}100%{transform:rotateX(0deg);opacity:1}}
  .wg-vtxt.wgflip{animation:wgflipS .6s cubic-bezier(.18,.75,.3,1) both;transform-box:fill-box;transform-origin:50% 100%}   /* SVG 文字时钟翻页（窄屏不支持 3D 时退化为纵向压扁翻页观感） */
  .wg-vunit{fill:var(--c-muted);font-weight:400}
  .wg-rgn{fill:var(--c-muted);font-weight:400}
  .wg-meta{margin-top:0;text-align:center}
  .wg-half .wg-meta{margin-top:-8px}   /* 绿钮顶到指针红线（圆点水平线），红线=用户标记位 */
  .wg-mrow{font-size:12px;color:var(--c-ink2);line-height:1.5}
  .wg-mrow b{font-weight:700;color:var(--c-ink)}
  /* 仪表下方规则徽章：2026-10-30 放大（12px→15px，内边距 4/12→7/18），更醒目。
     窄屏（双盘每侧只有 190px 左右）按断点回落字号，避免文字撑出仪表宽度 */
  .wg-rule{display:inline-block;font-size:15px;font-weight:700;color:#fff;padding:7px 18px;
    border-radius:999px;line-height:1.35;letter-spacing:.2px;white-space:nowrap;
    box-shadow:0 2px 6px rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.22)}
  @media(max-width:1100px){.wg-rule{font-size:14px;padding:6px 15px}}
  @media(max-width:920px){.wg-rule{font-size:12.5px;padding:5px 12px}}
  @media(max-width:780px){.wg-rule{font-size:11.5px;padding:4px 9px}}
  @media(max-width:640px){.wg-rule{font-size:15px;padding:7px 18px}}
  .wg-pct{font-size:15px;font-weight:600;color:var(--c-ink2);margin-top:5px;letter-spacing:.2px}
  .wg-rk1{background:linear-gradient(135deg,#22c55e,#15803d)}
  .wg-rk2{background:linear-gradient(135deg,#84cc16,#4d7c0f)}
  .wg-rk3{background:linear-gradient(135deg,#facc15,#ca8a04)}
  .wg-rk4{background:linear-gradient(135deg,#fb923c,#ea580c)}
  .wg-rk5{background:linear-gradient(135deg,#f87171,#dc2626)}
  .wg-legend{margin-top:8px;border-top:0.5px solid var(--c-line);padding-top:8px}
  .wg-lcap{font-size:11px;color:var(--c-muted);margin-bottom:6px;line-height:1.35}
  .wg-chips{display:flex;flex-direction:column;gap:5px}
  .wg-row{display:flex;align-items:center;gap:7px;line-height:1.2;width:100%}
  .wg-row.wg-cur{background:rgba(34,197,94,.13);border-radius:6px}
  .wg-row.wg-cur .wg-rn{font-weight:800}
  .wg-row.wg-cur .wg-rn::after{content:'◀ 当前';font-size:9.5px;font-weight:700;color:#22c55e;margin-left:4px}
  .wg-bar{width:4px;border-radius:2px;align-self:stretch;min-height:18px;flex:none}
  .wg-rn{font-size:13.5px;font-weight:700;color:var(--c-ink);white-space:nowrap;flex:none;min-width:30px}
  .wg-rv{font-style:normal;border-radius:5px;padding:3px 8px;font-size:11.5px;font-weight:600;color:#fff;white-space:nowrap;line-height:1.4;flex:1;text-align:center}
  .wg-rok{background:#16a34a!important;color:#fff!important;font-weight:600;flex:1;text-align:center}
  /* 今日额度进度条：2026-10-30 取代「绿色为正常区间…」说明行。
     整条打底=浅绿→橙渐变（代表剩余额度），已用部分=白底从左往右推进吃掉渐变，用完时整条变白；
     按卡片中心线绝对居中、与左右标题文字平齐；手机端换行独占一行（relative 让条内文字锚定回胶囊） */
  .sumttl{position:relative}
  .wg-quota{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
    width:min(46%,430px);height:22px;border-radius:999px;background:var(--c-surface,#fff);
    border:1.5px solid var(--c-line,#c9c3b4);overflow:hidden}
  .wg-quota .wq-grad{position:absolute;inset:0;border-radius:999px;
    background:linear-gradient(90deg,#c3e594 0%,#f6d47c 60%,#efa63b 100%)}
  .wg-quota .wq-mask{position:absolute;top:0;bottom:0;left:0;
    background:var(--c-surface,#fff);transition:right .35s}
  .wg-quota .wq-t{position:absolute;top:50%;transform:translateY(-50%);font-style:normal;
    font-size:11px;font-weight:600;color:var(--c-ink);white-space:nowrap;z-index:2;line-height:1}
  .wg-quota .wq-l{left:9px}
  .wg-quota .wq-p{left:50%;transform:translate(-50%,-50%);font-weight:700}
  .wg-quota .wq-r{right:9px}
  @media(max-width:900px){
    .sumttl{flex-wrap:wrap}
    .wg-quota{position:relative;top:auto;left:auto;transform:none;order:3;flex:1 1 100%;width:auto;margin-top:4px}
  }
  .wg-side{display:none}
  @media(min-width:641px){
    .wg-dual{display:none}
    .wg-legend{display:none}
    .wg-pair{display:grid;grid-template-columns:1fr 1fr;gap:0;margin:0;align-items:center;position:relative}
    /* 紧凑型：图例占满剩余宽度，盘定宽不再缩放 */
    .wg-half{display:grid;grid-template-columns:minmax(140px,38%) minmax(0,1fr);gap:10px;align-items:center;padding:0 2px}
    .wg-half-r{grid-template-columns:minmax(0,1fr) minmax(140px,38%)}
    .wg-pct-m{display:none}   /* 手机端状态行副本只在窄屏显示 */
    .wg-center-top{position:absolute;top:-8px;left:50%;transform:translateX(-50%);text-align:center;z-index:2;pointer-events:none}   /* 状态行+余额：两表之间顶部空档（用户图2位置） */
    .wg-center-top .wg-pct{font-size:13px}   /* 用户定稿 13px */
    .wg-cval{font-size:34px;font-weight:700;line-height:1.15;margin-top:1px;perspective:520px;--wgstk:rgba(0,0,0,.5)}   /* 用户定稿 34px；描边色随主题 */
    html.dark .wg-cval{--wgstk:rgba(255,255,255,.9)}   /* 深色背景=白描边、浅色背景=黑描边 */   /* 翻页动画的 3D 透视 */
    .wg-cval > span{display:inline-block;background:linear-gradient(180deg,#ffcf3d 0%,#ff9d2e 60%,#ff7a00 100%);-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;font-variant-numeric:tabular-nums;filter:drop-shadow(1px 0 0 var(--wgstk)) drop-shadow(-1px 0 0 var(--wgstk)) drop-shadow(0 1px 0 var(--wgstk)) drop-shadow(0 -1px 0 var(--wgstk)) drop-shadow(0 0 3px var(--wgstk))}   /* 渐变文字+主题描边（drop-shadow 作用于渐变字形像素） */
    @keyframes wgflip{0%{transform:rotateX(90deg);opacity:.15}55%{transform:rotateX(-13deg);opacity:1}100%{transform:rotateX(0deg);opacity:1}}
    .wgflip{animation:wgflip .6s cubic-bezier(.18,.75,.3,1) both;transform-origin:50% 100%;backface-visibility:hidden}   /* 时钟翻页：新值从下向上翻入 */
    .wg-half + .wg-half{border-left:0}   /* 竖线改画在 pair 上：红标高度起、直通按钮行底，不再缺段 */
    .wg-pair::before{content:'';position:absolute;left:50%;top:58px;bottom:0;width:0.5px;background:var(--c-line)}   /* 从放大后的数字块下方起，直通按钮行底 */
    .wg-side{display:block;width:100%;min-width:0}
    .wg-side .wg-chips{display:flex;flex-direction:column;gap:5px;align-items:stretch}
    .wg-half-r .wg-side .wg-row{flex-direction:row-reverse}
    /* 图例标题与下方「彩色徽章列」居中对齐：行结构 = 色条4 + 间距7 + 折数30 + 间距7 = 48px 固定偏移 */
    .wg-side .wg-lcap{margin-bottom:7px;text-align:center;font-size:12.5px;font-weight:700;color:var(--c-ink2);white-space:nowrap}
    .wg-half:not(.wg-half-r) .wg-side .wg-lcap{padding-left:48px}
    .wg-half-r .wg-side .wg-lcap{padding-right:48px}
    .wg-half .wg-side{align-self:stretch;display:flex;flex-direction:column;justify-content:space-between;padding-top:30px}   /* 顶部白色间隔约 2 倍（用户定稿）；底部与按钮行精确齐平 */
    .wg-half .wg-side .wg-chips{flex:1 1 auto;justify-content:space-between}   /* space-between：首档顶到标题、末档贴底（evenly 会在末档下留均等空隙=永不齐平） */
    .wg-one{width:100%;min-width:0}
    .wg-pair .wg-svg{margin:0}
  }
    @media(max-width:1024px){.kpirow{grid-template-columns:repeat(4,minmax(0,1fr))}}
  @media(max-width:640px){.kpirow{grid-template-columns:repeat(3,minmax(0,1fr))}.kpiv{font-size:17px}.kpil{font-size:11px}.kpirow .kpicard:last-child:nth-child(3n+1){grid-column:1/-1}.sumrow{grid-template-columns:1fr}}
  @media(max-width:640px){.waterbar{height:44px;margin-top:20px}.wz em{font-size:9px;line-height:1.4;padding:0 2px}.wz .full{display:none}.wz .mini{display:inline}.wz .fu{display:none}.waterpeak{top:-18px;transform:none;left:0;font-size:10px;padding:1px 5px}.waterval{display:none}}
    /* 用户目录表格：16 列。
     列宽用「百分比、合计 100%」——表格永远精确等于容器宽度，PC 任何缩放下都不会出现横向滚动条；
     百分比按各列内容的实际需要分配「地址 12 字、入金时间 16 字、状态 3 字徽章」，
     并把字号压到 11.5px、内边距 3px，保证在最窄的 PC 容器「约 950px，即 1366 屏 125% 缩放」下也不截字。 */
  #statsPage .utable{table-layout:fixed;width:100%;font-size:11.5px}
  /* 表头单独用 10.5px：表头要容纳「4 个汉字 + 排序箭头 ↓」，比数据格更吃宽度，
     统一 11.5px 时「累计入金 ↓」这类会差 1~2px 被截成「累计入…」 */
  #statsPage .utable th{font-size:10.5px;letter-spacing:0}
  #statsPage .utable th,
  #statsPage .utable td{box-sizing:border-box;
                        white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
                        padding:3px 4px !important;
                        text-align:center !important}
  #statsPage .utable th:nth-child(1),  #statsPage .utable td:nth-child(1) {width:3.5%}  /* # */
  #statsPage .utable th:nth-child(2),  #statsPage .utable td:nth-child(2) {width:13.5%}  /* 地址 */
  #statsPage .utable th:nth-child(3),  #statsPage .utable td:nth-child(3) {width:6.3%}  /* 股东 */
  #statsPage .utable th:nth-child(4),  #statsPage .utable td:nth-child(4) {width:3.6%}  /* 档位 */
  #statsPage .utable th:nth-child(5),  #statsPage .utable td:nth-child(5) {width:3.6%}  /* 级别 */
  #statsPage .utable th:nth-child(6),  #statsPage .utable td:nth-child(6) {width:5.8%}  /* 累计入金 */
  #statsPage .utable th:nth-child(7),  #statsPage .utable td:nth-child(7) {width:5.8%}  /* 当前仓位 */
  #statsPage .utable th:nth-child(8),  #statsPage .utable td:nth-child(8) {width:5.8%}  /* 已付利息 */
  #statsPage .utable th:nth-child(9),  #statsPage .utable td:nth-child(9) {width:5.9%}  /* 推荐奖 */
  #statsPage .utable th:nth-child(10), #statsPage .utable td:nth-child(10) {width:5.9%}  /* 代理奖 */
  #statsPage .utable th:nth-child(11), #statsPage .utable td:nth-child(11) {width:5.9%}  /* 合并奖 */
  #statsPage .utable th:nth-child(12), #statsPage .utable td:nth-child(12) {width:5.9%}  /* 已收 */
  #statsPage .utable th:nth-child(13), #statsPage .utable td:nth-child(13) {width:5.9%}  /* 净利 */
  #statsPage .utable th:nth-child(14), #statsPage .utable td:nth-child(14) {width:5.3%}  /* 回本 */
  #statsPage .utable th:nth-child(15), #statsPage .utable td:nth-child(15) {width:4.2%}  /* 团队 */
  #statsPage .utable th:nth-child(16), #statsPage .utable td:nth-child(16) {width:12.3%}  /* 入金时间 */
  #statsPage .utable th:nth-child(17), #statsPage .utable td:nth-child(17) {width:6.7%}  /* 倒计时 */
  /* 窄 PC「容器 < 1000px，约等于 1160 视口或 1366 屏 125% 缩放」：隐藏复制按钮，
     把宽度让给地址文字，避免地址被省略号截断 */
  @media(max-width:1200px){
    #statsPage .utable .rcopy{display:none}
  }
  /* 徽章在窄列里不换行、不加内边距，避免把列撑开 */
  #statsPage .utable .st{padding:0 3px;font-size:11px}
  /* 地址单元格内部：地址文字可省略，复制按钮 flex:none 永不被裁 */
  #statsPage .utable td:nth-child(2) > span{display:inline-block;max-width:calc(100% - 24px);
    overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
  #statsPage .utable td:nth-child(2) > .rcopy{vertical-align:middle;flex:none}
  /* 地址列左对齐：复制按钮紧跟文字，不再左右各留一段空白 */
  #statsPage .utable th:nth-child(2),
  #statsPage .utable td:nth-child(2){text-align:left !important;padding-left:9px !important}
  .qrow{display:flex;gap:14px;align-items:stretch}
  .qbig{flex:0 0 auto;min-width:116px}
  .qbig i{display:block;font-style:normal;font-size:11px;color:var(--c-muted)}
  .qbig b{font-size:23px;font-weight:700;color:var(--c-ink)}
  .qbig u{text-decoration:none;font-size:11px;color:var(--c-muted);margin-left:3px}
  .qmeta{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:5px}
  .qnums{font-size:12.5px;color:var(--c-muted);margin-bottom:5px}
  .qnums b{color:var(--c-ink)}
  @media(max-width:640px){.wmobile{display:block;text-align:center}.qcard{grid-column:1/-1}.qrow{flex-direction:column;align-items:stretch;gap:7px}.qbig{display:flex;align-items:baseline;gap:7px;min-width:0}.qbig b{font-size:21px}.dbar{flex:none;min-height:34px}.dbar > div{min-height:34px}}
  .dautoline{display:flex;align-items:stretch;gap:10px;flex-wrap:wrap;align-self:stretch}
  .dautoline .err:empty{display:none}
@media(max-width:640px){.dautoline{margin-left:auto}}
  .qauto{display:inline-flex;align-items:center;gap:5px;align-self:stretch;border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink2);border-radius:6px;padding:6px 14px;font-size:12.5px;cursor:pointer;font-family:inherit;font-weight:600}
  .qauto.on{border-color:#f7941e;color:#b26a10;background:#fff7ec}
  .dark .qauto{background:var(--c-surface);color:var(--c-ink2)}
  .dark .qauto.on{border-color:#f7941e;color:#ffb75e;background:rgba(247,148,30,.12)}
  .qbadge{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--c-line);border-radius:5px;padding:3px 10px;font-size:11.5px;color:var(--c-ink2);background:var(--c-surface)}
  .qbadge b{color:var(--c-ink)}
  .wlchip{flex:1 1 calc(20% - 5px);min-width:0;display:flex;flex-direction:column;gap:3px;border:1px solid var(--c-line);border-radius:6px;padding:7px 9px;font-size:11.5px;color:var(--c-ink2);background:var(--c-surface)}
  .wlchip.ok{border-color:var(--c-ok);color:var(--c-ok);background:var(--c-ok-bg)}
  .wlchip.bad{border-color:var(--c-danger);color:var(--c-danger);background:var(--c-danger-bg)}
  .wlchip .mono{color:inherit}
  .wlchip .wlt{display:flex;align-items:center;justify-content:space-between;gap:4px;white-space:nowrap}
  .wlchip .wlt b{font-weight:600}
  .wlchip .wlt i{font-style:normal;flex:none}
  .wlchip .wla{font-size:10.5px;opacity:.82;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  @media(max-width:640px){.wlchip{flex-basis:calc(50% - 3px)}}
  .dbar{position:relative;flex:1;min-height:38px;background:var(--c-soft);border-radius:6px;margin:0;overflow:hidden}
  .dbar > div{height:100%;min-height:38px;border-radius:6px;transition:width .3s;background:#bfe3cb}
  .dbar .bused{position:absolute;left:8px;top:50%;transform:translateY(-50%);font-size:11.5px;font-weight:600;color:var(--c-ink);z-index:2;white-space:nowrap}
  .dbar .bused b{font-weight:700}
  .dbar .bcap{position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:11.5px;color:var(--c-ink);z-index:2;white-space:nowrap}
  .dbar .bcap b{color:var(--c-ink)}
  .dbar > div.s1{background:#f5dfb8}
  .dbar > div.s2{background:#f2c7c5}
  .dcard .btn{margin-top:9px;width:100%;padding:9px 10px;font-size:13px;border-radius:5px}
  .dcard .err{font-size:12px;margin-top:6px;min-height:14px;color:var(--c-danger)}
  .dcard > h3{display:flex;align-items:center;gap:8px}
  .dcard > h3 .cbtn{margin-left:auto;flex:none;background:var(--c-surface);border:1px solid var(--c-line);border-radius:5px;padding:3px 11px;font-size:12.5px;color:var(--c-ink2);cursor:pointer;font-weight:400}
  #snapBaseBtn{background:var(--c-btn);color:var(--c-btn-ink);border-color:var(--c-btn);font-weight:600;font-size:12.5px;padding:4px 12px;line-height:1.4}
  #snapBaseBtn:hover{background:var(--c-ink-hover);border-color:var(--c-ink-hover);color:var(--c-btn-ink)}
  #pc-dash-toggle,#pc-stats-toggle{padding:5px 11px;font-size:12.5px;line-height:1.4}
  .dirtab{border:none;background:transparent;color:var(--c-muted);font-family:inherit;font-size:13.5px;font-weight:600;padding:8px 16px;border-radius:5px;cursor:pointer}
  .dirtab:hover{color:var(--c-ink);background:var(--c-soft)}
  .dirtab-on{background:var(--c-btn);color:var(--c-btn-ink);font-weight:700;box-shadow:0 0 0 1px var(--c-btn) inset}
  .dirtab-on:hover{background:var(--c-btn);color:var(--c-btn-ink)}

  /* ===== 池合约走势图卡片「团队查询 + 数据总览共用」 ===== */
  .pc-tabs{display:inline-flex;gap:6px;flex-wrap:wrap;margin-left:10px;vertical-align:middle}
  .pc-tab{border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink2);border-radius:5px;padding:5px 12px;font-size:12px;cursor:pointer;font-family:inherit}
  .pc-tab-on{background:var(--c-btn);color:var(--c-btn-ink);border-color:var(--c-btn)}
  .pc-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:8px}
  @media(max-width:900px){.pc-grid{grid-template-columns:1fr}}
  .pc-box{border:1px solid var(--c-line2);border-radius:5px;background:var(--c-surface);padding:10px}
  .pc-title{font-size:12.5px;font-weight:700;color:var(--c-ink);margin-bottom:6px}
  .pc-svg{height:280px}
  .pc-legend{display:flex;gap:14px;justify-content:center;font-size:11.5px;color:var(--c-muted);margin-top:4px}
  .pc-dot{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:4px;vertical-align:middle}
  .pc-table{width:100%;border-collapse:collapse;font-size:11.5px;margin-top:10px}
  .pc-table th,.pc-table td{padding:5px 6px;border-bottom:1px solid var(--c-line2);text-align:center;white-space:nowrap}
  .pc-table th{background:var(--c-soft)}
  .pc-empty{color:var(--c-muted);font-size:12.5px;padding:14px 4px;text-align:center}

  .pcdg,.pcdr,.pcdm,.pcdo,.pdca{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:4px;vertical-align:middle}
  .pcdg{background:#2e9e5b}.pcdr{background:#d9534f}.pcdm{background:var(--c-muted)}
  .pcdo{background:var(--c-ok)}.pdca{background:var(--c-accent)}

  .uchip{border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink2);font-family:inherit;font-size:12px;font-weight:600;border-radius:5px;padding:7px 12px;cursor:pointer;display:inline-flex;align-items:center;gap:5px}
  .uchip:hover{border-color:var(--c-accent);color:var(--c-accent)}
  .uchip-on{border-color:var(--c-accent);color:var(--c-accent);background:var(--c-soft)}
  .uchip-n{background:var(--c-soft);border-radius:5px;padding:0 6px;font-size:11px}
  /* ===== 用户目录筛选栏：PC 一行平铺拉满 / 手机 三行「地址 → 状态 3 个 → 级别 6 个」 ===== */
  /* 筛选条：PC 必须一行排完「不换行」。做法是压缩 chip 尺寸 + 搜索框可伸缩，
     把总宽压到 1130px 容器以内；只有窗口窄到 980px 以下才退化为横向滚动。 */
  .ufilter{display:flex;flex-wrap:nowrap;align-items:center;gap:4px;padding-bottom:2px;overflow-x:auto;overflow-y:hidden}
  .ufrow{display:contents}                 /* PC：两行分组不占位，全部并进同一行 */
  .ufilter .usearch{flex:0 1 200px;min-width:100px;padding:6px 8px;font-size:12.5px;
                    border:1px solid var(--c-line);border-radius:5px;background:var(--c-surface);font-family:Consolas,monospace}
  /* 宽屏：等分拉伸铺满；一行放不下时自动换行，保持文字完整 */
  .ufilter .uchip{flex:0 0 auto;min-width:max-content;justify-content:center;white-space:nowrap}
  #statsPage .ufilter .uchip{padding:4px 7px;font-size:11.5px;gap:4px}
  #statsPage .ufilter .uchip-n{padding:0 4px;font-size:10.5px}
  .dcard > h3 .cbtn:hover{border-color:var(--c-accent);color:var(--c-accent)}
  /* 手机端：标题行平铺——周期按钮均分行内剩余宽度；「展开」按钮换行后靠右 */
  @media(max-width:640px){
    .dcard > h3{flex-wrap:wrap;row-gap:7px;align-items:center}
    .dcard > h3 .cbtn{flex:0 0 auto;max-width:max-content;margin-left:auto}   /* 手机端展开按钮跟标题同行、靠右「2026-10-28 用户定」 */
    .dcard > h3 .pc-tabs{flex:1 1 auto;display:flex;gap:6px;margin-left:0;min-width:0}
    .dcard > h3 .pc-tab{flex:1 1 0;text-align:center;padding:5px 4px;white-space:nowrap}
  }
  /* ===== 团队结构树：横纵滚动面板「单行不换行，不卡片化」 ===== */
  .treebox{margin-top:8px;overflow:auto;max-height:min(62vh,480px);border:1px solid var(--c-line2);border-radius:5px;background:var(--c-surface);padding:6px 10px;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
  .treebox::-webkit-scrollbar{height:9px;width:9px}
  .treebox::-webkit-scrollbar-thumb{background:var(--c-line);border-radius:5px}
  .treebox::-webkit-scrollbar-thumb:hover{background:var(--c-line)}
  .treebox::-webkit-scrollbar-track{background:transparent}
  .tnode{border-left:1px dashed var(--c-line2);margin-left:10px;padding-left:10px}
  .trow{display:flex;flex-wrap:nowrap;align-items:center;gap:6px;padding:4px 2px;border-radius:5px;white-space:nowrap;width:max-content;min-width:100%}
  .trow:hover{background:var(--c-soft)}
  .ttgl{width:24px;flex:none;text-align:center;font-size:16px;font-weight:700;color:var(--c-ink);cursor:pointer;user-select:none;line-height:1.1}
  .ttgl.off{cursor:default}
  .taddr{font-family:Consolas,monospace;font-size:12px;color:var(--c-ink);flex:none;white-space:nowrap}
  .taddr[data-tgl]{cursor:pointer;user-select:none}
  .taddr[data-tgl]:hover{color:var(--c-accent)}
  .tact{font-size:11px}
  .tact a{color:var(--c-accent);text-decoration:none}
  .tact .rcopy{border:1px solid var(--c-line2);background:var(--c-surface);border-radius:5px;padding:2px 8px;font-size:13px;line-height:1;color:var(--c-ink2);cursor:pointer}
  .tact .rcopy:hover{border-color:var(--c-accent);color:var(--c-accent)}
  .tact .ropen{display:inline-block;font-size:13px;line-height:1;color:var(--c-accent);text-decoration:none;padding:2px 3px;font-weight:600}
  .tact .ropen:hover{color:var(--c-ink)}
  .tdate{border-radius:5px;padding:0 7px;font-size:10.5px;background:var(--c-soft);color:var(--c-muted)}
  .tbadge{border-radius:5px;padding:0 7px;font-size:10.5px;font-weight:700}
  .tb-lv{background:var(--c-soft);color:var(--c-gold)}
  /* 级别五色：V1 蓝 / V2 绿 / V3 黄 / V4 橙 / V5 红 */
  .tb-lv1{background:#e7f1ff;color:#1663c7}
  .tb-lv2{background:#e6f6ec;color:#1a7f37}
  .tb-lv3{background:linear-gradient(135deg,#0f766e,#14b8a6);color:#fff;animation:badgeGlowT 3s ease-in-out infinite}
  .tb-lv4{background:linear-gradient(135deg,#6d28d9,#a855f7);color:#fff;animation:badgeGlowP 3s ease-in-out infinite}
  .tb-lv5{background:linear-gradient(135deg,#b45309,#f59e0b,#b45309);color:#fff;animation:badgeGlowAu 3s ease-in-out infinite}
  @keyframes badgeGlowT{0%,100%{box-shadow:0 0 4px 0 rgba(20,184,166,.35)}50%{box-shadow:0 0 11px 2px rgba(20,184,166,.6)}}
  @keyframes badgeGlowP{0%,100%{box-shadow:0 0 4px 0 rgba(168,85,247,.35)}50%{box-shadow:0 0 11px 2px rgba(168,85,247,.6)}}
  @keyframes badgeGlowAu{0%,100%{box-shadow:0 0 4px 0 rgba(245,158,11,.35)}50%{box-shadow:0 0 11px 2px rgba(245,158,11,.65)}}
  /* 档位三色：档1 紫 / 档2 青 / 档3 玫红 */
  .tb-tier{background:var(--c-ok-bg);color:var(--c-ok)}
  .tb-tier1{background:#efeaf9;color:#5b3fa8}
  .tb-tier2{background:#e0f5f5;color:#0e7490}
  .tb-tier3{background:#fbe5ef;color:#b0246f}
  .tb-donor{background:linear-gradient(135deg,#178a52,#2fbf74);color:#fff;animation:badgeGlowG 3s ease-in-out infinite}
  @keyframes badgeGlowG{0%,100%{box-shadow:0 0 4px 0 rgba(46,191,116,.35)}50%{box-shadow:0 0 11px 2px rgba(46,191,116,.6)}}
  .tb-plain{background:var(--c-soft);color:var(--c-muted)}
  .tsub{font-size:11.5px;color:var(--c-muted)}
  .tsub b{color:var(--c-ink)}
  /* 树行两段式容器：PC 用 display:contents 让徽章/统计仍与地址同行；手机端媒体查询里改为整行铺开成第二行 */
  .tmeta{display:contents}
  .chainwarn{box-sizing:border-box;width:100%;background:var(--c-gold-bg);border:1px solid var(--c-gold);color:var(--c-gold);display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px;font-size:13px;font-weight:600;margin:10px 0 0;border-radius:5px;position:relative;z-index:60}
  .chainwarn .cwbtn{margin-left:auto;flex:none}
  @media(max-width:640px){.chainwarn{padding:7px 9px;font-size:12.5px;gap:6px}}
  /* ===== 记录列表「div 结构，不依赖 table，字段名左 / 值右对齐」 ===== */
  /* ===== 链不匹配提示条 ===== */
  .chainwarn{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
             background:var(--c-gold-bg);border:1px solid var(--c-gold-line);color:var(--c-gold);border-radius:5px;
             padding:10px 12px;margin:12px 0 0;font-size:12.5px;line-height:1.65}
  .chainwarn .cwbtn{flex:none;border:1px solid var(--c-gold);background:var(--c-gold-line);color:#4a3208;
                    font-family:inherit;font-size:12px;font-weight:700;padding:7px 12px;border-radius:5px;cursor:pointer}
  .chainwarn .cwbtn:hover{background:var(--c-gold-line)}

  /* ===== 地址框 + 付费按钮：PC 同一行，手机上下 ===== */
  /* 输入框与按钮等高对齐：整行拉伸，两者同高 */
  .daddr{display:flex;align-items:stretch;gap:8px}
  .daddr .dinput{flex:1 1 auto;min-width:0;margin-top:0;height:42px;padding:0 13px;font-size:15px}
  .daddr .btn{display:inline-flex;align-items:center;justify-content:center}
  /* 补偿查询的输入框嵌在 dashPage 里，用同一套并排布局 */
  #compPage .daddr .dinput{width:auto;flex:1 1 auto;min-width:0;padding:12px 13px;font-size:15px}
  .daddr .btn{flex:0 0 auto;width:auto;white-space:nowrap}
  @media(max-width:640px){
    .daddr{flex-direction:column;align-items:stretch;gap:0}
    .daddr .btn{width:100%}
    .daddr .dinput{height:46px;font-size:16px}
  }

  /* ===== 查询地址框：可输入=白底正常光标「免费模式」，只读=灰底灰字「付费模式」 ===== */
  #dashPage #dashQueryAddr{font-family:Consolas,Menlo,monospace !important;font-size:13px !important;
    letter-spacing:-.2px;padding:12px 10px !important}
  #dashPage #dashQueryAddr:not([readonly]){background:var(--c-surface);color:var(--c-ink);cursor:text}
  #dashPage #dashQueryAddr[readonly]{background:var(--c-soft);color:var(--c-ink3);cursor:default;text-overflow:clip}
  #dashPage #dashQueryAddr:focus{outline:none;border-color:var(--c-accent)}
  @media(max-width:640px){
    #dashPage #dashQueryAddr{font-size:12px !important;letter-spacing:-.35px;padding:12px 8px !important}
  }

  /* ===== 驾驶舱头部：标题 + 连接钱包按钮 ===== */
  .dhead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 8px}
  /* 合约直达按钮「跟在页面标题后面」 */
  .dlinks{display:inline-flex;align-items:center;gap:12px;flex-wrap:wrap;vertical-align:middle}
  /* 合约直达按钮：尺寸与「推额度 / 配置合约」完全一致，但保留渐变底 + 呼吸光 */
  .dlink{position:relative;display:inline-flex;align-items:center;gap:6px;flex:none;
    font-family:inherit;font-size:12.5px;font-weight:600;line-height:16px;
    padding:8px 14px;border-radius:5px;text-decoration:none;white-space:nowrap;cursor:pointer;
    color:#fff8ee;isolation:isolate;overflow:hidden;
    background-image:linear-gradient(165deg,#a06a34 0%,#7c4d20 55%,#5c3716 100%);
    border:1px solid rgba(255,226,178,.34);
    box-shadow:0 1px 0 rgba(255,255,255,.22) inset, 0 3px 10px rgba(92,55,22,.28);
    transition:transform .16s ease, filter .16s ease, box-shadow .2s ease}
  .dlink > *{position:relative;z-index:2}
  .dlink::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
    background-image:radial-gradient(130% 120% at 50% 132%, rgba(255,214,150,.9) 0%, rgba(255,214,150,.25) 38%, transparent 68%);
    animation:dlinkBreath 3.8s ease-in-out infinite}
  .dlink::after{content:"";position:absolute;top:-30%;left:-55%;width:38%;height:160%;z-index:1;pointer-events:none;
    background-image:linear-gradient(100deg,transparent 0%,rgba(255,255,255,.5) 50%,transparent 100%);
    transform:skewX(-20deg);animation:dlinkSweep 6s cubic-bezier(.4,0,.2,1) infinite}
  @keyframes dlinkBreath{0%,100%{opacity:.32}50%{opacity:1}}
  @keyframes dlinkSweep{0%,58%{left:-55%}86%,100%{left:130%}}
  .dlink:hover,.dlink:focus-visible{color:#fff;filter:brightness(1.07);transform:translateY(-1px);
    border-color:rgba(255,226,178,.55);outline:none}
  .dlink:active{transform:translateY(0)}
  /* 股东合约：翡翠绿 */
  .dlink[data-c="div"]{background-image:linear-gradient(165deg,#3d8a5f 0%,#2a6344 55%,#194029 100%);
    border-color:rgba(190,255,220,.32);
    box-shadow:0 1px 0 rgba(255,255,255,.20) inset, 0 3px 10px rgba(25,64,41,.28)}
  .dlink[data-c="div"]::before{background-image:radial-gradient(130% 120% at 50% 132%, rgba(180,255,215,.85) 0%, rgba(180,255,215,.22) 38%, transparent 68%)}
  .dlink[data-c="div"]:hover{border-color:rgba(190,255,220,.55)}
  .dlink .dli{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;flex:none}
  .dlink .dli svg{width:15px;height:15px;display:block}
  @media(max-width:640px){
    .dlink{padding:8px 10px;font-size:12px}
  }
  @media (prefers-reduced-motion:reduce){
    .dlink::before,.dlink::after{animation:none}
    .dlink::before{opacity:.55}
    .dlink::after{display:none}
  }
  .dhead h2{margin:0;min-width:0}
  /* 标题后面那一组按钮统一靠右「所有页面一致」 */
  .dhead > h2 + *{margin-left:auto}
  #disPage .dhead{flex-wrap:wrap}
  /* 多签管理：标题只占自身宽度，两个合约按钮紧跟其后；「推额度 / 配置合约」仍靠最右 */
  #disPage .dhead h2{flex:0 1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* 连接钱包按钮：橙色胶囊 + 钱包图标「未连接」/ 绿点 + 地址「已连接」 */
  .wbtn{display:inline-flex;align-items:center;justify-content:center;gap:7px;margin-left:auto;flex:none;
        border:0;background:#f7941e;color:#1c1b18;
        font-family:inherit;font-size:13.5px;font-weight:700;line-height:1;
        padding:11px 18px;border-radius:5px;cursor:pointer;
        transition:background .15s,box-shadow .15s,transform .1s}
  .wbtn:hover{background:#f9a338}
  .wbtn:active{transform:translateY(1px)}
  .wbtn svg{width:16px;height:16px;flex:none;display:block}
  .wbtn .wdot{width:8px;height:8px;border-radius:50%;background:var(--c-ok);flex:none;display:none;
              box-shadow:0 0 0 3px rgba(255,255,255,.35)}
  .wbtn.on .wdot{display:block}
  .wbtn.on svg{display:none}
  .wmenu{position:fixed;z-index:9998;width:282px;max-width:calc(100vw - 24px);
         display:none;background:var(--c-surface);border:1px solid var(--c-line2);border-radius:5px;padding:6px;
         box-shadow:0 14px 40px rgba(0,0,0,.18)}
  .wmenu.open{display:block;animation:wpop .14s ease-out}
  .wm-top{padding:9px 10px 10px;border-bottom:1px solid var(--c-line2);margin-bottom:5px}
  .wm-addr{font-family:Consolas,Menlo,monospace;font-size:11px;letter-spacing:-.2px;
           color:var(--c-ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.6}
  .wm-item{display:block;width:100%;box-sizing:border-box;text-align:left;border:0;background:transparent;
           font-family:inherit;font-size:12.5px;color:var(--c-ink);padding:9px 10px;border-radius:5px;
           cursor:pointer;text-decoration:none;line-height:1.4}
  .wm-item:hover{background:var(--c-soft)}
  .wm-item.danger{color:var(--c-danger)}
  .wm-item.danger:hover{background:var(--c-danger-bg)}

  @media(max-width:640px){
    /* 手机上标题单独占一行，按钮组落到第二行靠右，避免标题被挤成两行 */
    .dhead{gap:8px;flex-wrap:wrap;row-gap:6px}
    .dhead h2{flex:1 1 auto;min-width:0;font-size:17px;line-height:1.3}
    .dhead > h2 + *{margin-left:auto}
    /* 手机上合约按钮整行平铺：两个按钮各占一半，撑满宽度 */
    .dhead .dlinks{flex:1 1 100%;justify-content:stretch;margin-left:0;gap:8px}
    .dhead .dlinks .dlink{flex:1 1 0;min-width:0;justify-content:center}
    .dhead .cfgbtn{flex:0 0 auto}
    .wbtn{padding:9px 14px;font-size:12.5px;gap:6px;max-width:58%}
    .wbtn span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .wbtn svg{width:15px;height:15px}
  }

  /* ===== 钱包选择弹窗「1:1 对齐 XOL：头部 / 分组 / 36px 圆角 Logo / 底部链提示」 ===== */
  .wmask{position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;
         padding:16px;background:rgba(20,18,15,.55);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
  .wmask.open{display:flex}
  .wmodal{width:100%;max-width:384px;max-height:100%;display:flex;flex-direction:column;
          background:var(--c-surface);border:1px solid var(--c-line2);border-radius:5px;overflow:hidden;
          box-shadow:0 24px 64px rgba(0,0,0,.30);animation:wpop .16s ease-out}
  @keyframes wpop{from{transform:translateY(10px) scale(.985);opacity:.5}to{transform:none;opacity:1}}

  .whead{display:flex;align-items:center;justify-content:space-between;gap:10px;
         padding:16px 24px;border-bottom:1px solid rgba(229,225,213,.7);flex:none}
  .whead h2{margin:0;font-size:16px;font-weight:600;color:var(--c-ink);line-height:1.4}
  .wx{display:flex;align-items:center;justify-content:center;width:32px;height:32px;flex:none;
      border:0;border-radius:5px;background:transparent;color:var(--c-muted);cursor:pointer;
      transition:background .15s,color .15s;padding:0}
  .wx:hover{background:var(--c-soft);color:var(--c-ink)}

  .wscroll{padding:16px;overflow-y:auto;max-height:70vh}
  .wsec{margin:0;padding:12px 8px 4px;font-size:11px;font-weight:600;letter-spacing:.12em;
        text-transform:uppercase;color:var(--c-muted);line-height:1.4}
  .wscroll > .wsec:first-child{padding-top:4px}

  .wrow{display:flex;align-items:center;gap:12px;width:100%;margin:0 0 4px;
        padding:8px 12px;border:1px solid transparent;border-radius:5px;background:transparent;
        text-align:left;font-family:inherit;color:var(--c-ink);cursor:pointer;
        transition:border-color .15s,background .15s,opacity .15s;text-decoration:none}
  .wrow:hover{border-color:rgba(138,90,43,.35);background:var(--c-soft)}
  .wlogo{width:36px;height:36px;flex:none;border-radius:5px;border:1px solid rgba(229,225,213,.8);
         background:var(--c-surface);object-fit:contain;padding:2px;box-sizing:border-box}
  .wmeta{flex:1;min-width:0;display:block}
  .wname{display:block;font-size:14px;font-weight:500;line-height:1.35;color:var(--c-ink);
         overflow-wrap:anywhere;word-break:break-word}
  .wsub{display:flex;align-items:center;gap:4px;font-size:11px;line-height:1.5;color:var(--c-muted);margin-top:1px}
  .wsub svg{flex:none}
  .wdetected{display:flex;align-items:center;gap:4px;flex:none;font-size:11px;font-weight:700;color:var(--c-ok)}

  .wrow-install{opacity:.6}
  .wrow-install:hover{opacity:1}
  .winstall{display:flex;align-items:center;gap:4px;flex:none;font-size:11px;font-weight:600;color:var(--c-accent)}
  .winstall svg{flex:none}

  .werr{margin:12px 0 0;padding:10px 12px;border:1px solid var(--c-danger);border-radius:5px;background:var(--c-danger-bg)}
  .werr-t{margin:0;font-size:12.5px;font-weight:600;color:var(--c-danger)}
  .werr-m{margin:4px 0 0;font-size:11.5px;line-height:1.6;color:var(--c-danger);word-break:break-word}

  .wcenter{display:flex;flex-direction:column;align-items:center;padding:40px 24px;text-align:center}
  .wpulse{position:relative;display:flex;align-items:center;justify-content:center;width:64px;height:64px}
  .wpulse::before{content:'';position:absolute;inset:0;border-radius:50%;background:rgba(138,90,43,.20);
                  animation:wping 1.5s ease-out infinite}
  @keyframes wping{0%{transform:scale(.55);opacity:.85}100%{transform:scale(1.35);opacity:0}}
  .wchip{position:relative;display:flex;align-items:center;justify-content:center;width:56px;height:56px;
         border-radius:5px;background:var(--c-soft);color:var(--c-accent)}
  .wspin-svg{animation:wspin .9s linear infinite}
  @keyframes wspin{to{transform:rotate(360deg)}}
  .wct{margin:20px 0 0;font-size:14px;font-weight:600;color:var(--c-ink)}
  .wsub2{margin:6px 0 0;max-width:16rem;font-size:12px;line-height:1.65;color:var(--c-muted)}
  .wqrpane{margin:16px 0 0;padding:10px;border:1px solid var(--c-line2);border-radius:5px;background:#fff}
  .wqrbox{width:200px;height:200px;display:flex;align-items:center;justify-content:center}
  .wqrbox img,.wqrbox canvas{display:block;width:200px !important;height:200px !important}
  #disQrStage img,#disQrStage canvas{margin:0 auto;display:block}
  .wghost{margin:24px 0 0;padding:0 18px;height:40px;border:1px solid var(--c-line);border-radius:5px;
          background:transparent;color:var(--c-ink3);font-family:inherit;font-size:12px;font-weight:600;
          cursor:pointer;transition:background .15s}
  .wghost:hover{background:var(--c-soft)}

  .wfoot{margin:0;padding:12px 24px;border-top:1px solid rgba(229,225,213,.7);flex:none;
         text-align:center;font-size:11px;line-height:1.5;color:var(--c-muted)}

  @media(max-width:640px){
    /* 手机端也居中弹出「原来是贴底抽屉，用户要求改居中」 */
    .wmask{padding:16px;align-items:center;justify-content:center}
    .wmodal{max-width:100%;max-height:calc(100% - 32px);border-radius:5px}
    .wscroll{max-height:none;flex:1 1 auto;min-height:0;padding:12px}
    .whead{padding:14px 18px}
    .wfoot{padding:11px 18px}
    .wcenter{padding:32px 18px}
  }

  /* ===== 身份卡「是否股东」===== */
  .shcard{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
          border-radius:5px;padding:13px 15px;margin:12px 0 0;text-align:center;
          border:1px solid var(--c-line);background:var(--c-soft);color:var(--c-ink2)}
  .shcard .shtag{flex:none;font-weight:700;font-size:14px;letter-spacing:.5px;padding:5px 13px;border-radius:5px;
                 background:var(--c-soft);color:var(--c-ink3);border:1px solid var(--c-line);white-space:nowrap}
  .shcard .shdesc{font-size:13px;line-height:1.65;min-width:0;text-align:center}
  /* 「非股东」时的引导语要醒目：加粗 + 主题强调色 */
  .shcard:not(.gold) .shdesc{font-size:14px;font-weight:700;color:var(--c-accent);letter-spacing:.2px}
  .shcard .shdesc:empty{display:none}
  /* 股东合约地址行 */
  .shcard .shaddr{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:2px 6px;
                  font-size:11.5px;line-height:1.9;max-width:100%;width:100%}
  .shcard .shaddr .shk{color:var(--c-muted);flex:none}
  .shcard .shaddr .shv{font-family:Consolas,monospace;word-break:break-all;color:var(--c-accent);
                       cursor:pointer;text-decoration:underline;min-width:0}
  .shcard.gold{border-color:var(--c-gold);background:linear-gradient(135deg,var(--c-gold-bg) 0%,var(--c-gold-line) 55%,var(--c-gold-line) 100%);
               color:var(--c-gold);box-shadow:0 2px 10px rgba(201,161,63,.28)}
  .shcard.gold .shtag{background:linear-gradient(135deg,var(--c-gold-line),var(--c-gold));color:#4a3208;border-color:var(--c-gold);
                      box-shadow:0 1px 4px rgba(140,100,20,.28)}
  /* ===== 双卡布局：左=身份状态 / 右=合约地址速查「桌面并排、手机堆叠」 ===== */
  .shgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:12px 0 0;align-items:stretch}
  .shgrid .shcard{margin:0;height:100%}
  .shgrid .shcard.addrs{grid-column:span 2}   /* 身份1格 + 豁免1格 + 地址2格「2026-10-28 用户定」 */
  .shcard.addrs{align-items:stretch;text-align:left;justify-content:center;gap:7px;padding:13px 16px}
  .shcard.addrs .shaddr{justify-content:center;text-align:center}   /* 三行地址+按钮组整体居中「2026-10-28 用户定」 */
  .shcard.addrs .shaddr .shbtn{display:inline-flex;align-items:center;justify-content:center;flex:none;
                               font-size:11px;line-height:1.25;padding:4px 9px;border-radius:5px;
                               text-decoration:none;white-space:nowrap;font-family:inherit;margin-left:2px}
  .shcard.addrs .shv.qv{cursor:pointer}   /* 当前查询地址=超链接「2026-10-28 用户定」，继承 .shv 下划线与强调色 */
  /* 说明文案补充段：PC 端独立成第二行，手机端保持连排「用户定」 */
  .shcard .shdesc .sd2{display:inline}
  @media(min-width:641px){.shcard .shdesc .sd2{display:block;margin-top:3px}}
  /* 卡片标题右侧状态徽标「休眠/出局/额度用满等判断，靠右对齐，PC/手机一致」 */
  .dcard > h3 .statbadge{margin-left:auto;flex:none;font-style:normal;font-size:12.5px;font-weight:700;
    line-height:1.5;padding:3px 9px;border-radius:5px;background:var(--c-danger-bg);color:var(--c-danger);
    border:1px solid var(--c-danger);white-space:nowrap}
  .dcard > h3 .statbadge.warn{background:#fdf3e3;color:#b26a00;border-color:#d99a2b}
  .dcard > h3 .statbadge.ok{background:var(--c-ok-bg);color:var(--c-ok);border-color:var(--c-ok)}
  .dcard > h3 .statbadge.plain{background:var(--c-soft);color:var(--c-muted);border-color:var(--c-line)}
  .dcard > h3 .statbadge:empty{display:none}
  /* 股东金标：呼吸金光「炫酷样式」 */
  @keyframes shtagGlow{0%,100%{box-shadow:0 1px 4px rgba(140,100,20,.28)}50%{box-shadow:0 0 14px rgba(233,196,106,.85)}}
  .shcard.gold .shtag{animation:shtagGlow 2.6s ease-in-out infinite}
  .shcard.gold .shdesc{font-weight:600;letter-spacing:.2px}
  @media(max-width:640px){
    .shgrid{grid-template-columns:1fr}
    .shgrid .shcard.addrs{grid-column:auto}
    /* 手机端多卡上下堆叠后，地址速查卡也整体居中「与身份卡一致」 */
    .shcard.addrs{text-align:center}
    .shcard.addrs .shaddr{justify-content:center}
    .shcard{padding:11px 12px;gap:8px;border-radius:5px}
    .shcard .shtag{font-size:12.5px;padding:4px 10px}
    .shcard .shdesc{font-size:12px;line-height:1.6}
    .shcard .shaddr{font-size:11px;line-height:1.8}
  }
  .rlist{display:block}
  .rempty{font-size:12.5px;color:var(--c-muted);padding:6px 0}
  .ritem{border:1px solid var(--c-line2);border-radius:5px;background:var(--c-surface);padding:9px 11px;margin:0 0 8px}
  /* 计息中的当前仓：淡绿高亮，与已领取历史仓一眼区分 */
  .ritem.stake-active{background:var(--c-ok-bg);border:1px solid var(--c-ok)}
  /* 倒计时徽章：浅灰「计息中」/ 橙「到期·压仓出金」 */
  .cd-pill{display:inline-block;background:var(--c-soft);border:1px solid var(--c-line2);border-radius:4px;padding:2px 9px;font-size:12px;color:var(--c-ink2)}
  /* 地址行操作按钮：黑底白字「深色模式反转白底黑字」，细边框 */
  .addr-btn{border:1px solid var(--c-ink);background:var(--c-ink);color:var(--c-surface);padding:0 5px;font-size:11px;line-height:1.9;border-radius:4px;cursor:pointer;font-family:inherit}
  .addr-btn:disabled{opacity:.35;cursor:not-allowed}
  #dashRefresh{display:none}
  .dark .addr-btn{border-color:var(--c-btn);background:var(--c-btn);color:var(--c-btn-ink)}
  /* 复制成功：居中呼吸弹窗，1.1s 自动消失 */
  .copy-toast{position:fixed;left:50%;top:38%;transform:translate(-50%,-50%) scale(.8);opacity:0;pointer-events:none;z-index:99999;
    background:rgba(24,19,12,.92);color:#fff;font-size:13px;font-weight:600;padding:10px 22px;border-radius:6px;
    box-shadow:0 8px 28px rgba(0,0,0,.35);transition:opacity .18s ease,transform .18s ease}
  .copy-toast.on{opacity:1;transform:translate(-50%,-50%) scale(1);animation:copyBreathe 1.1s ease forwards}
  @keyframes copyBreathe{0%{transform:translate(-50%,-50%) scale(.82)}45%{transform:translate(-50%,-50%) scale(1.06)}100%{transform:translate(-50%,-50%) scale(1)}}
  .cd-pill.cd-due{background:var(--c-gold-bg);color:var(--c-gold);border-color:var(--c-gold);font-weight:600}
  .cd-pill.cd-dorm{background:#ece7f8;color:#5e35b1;border-color:#c9bce8;font-weight:600}
  /* 计息中倒计时：绿色系「明暗主题走 ok 变量自动适配」 */
  .cd-pill.cd-run{background:var(--c-ok-bg);color:var(--c-ok);border-color:var(--c-ok);font-weight:600}
  /* 倒计时列三种胶囊「计息中/待压仓/休眠中」定宽 60px：恰好装下最长「15天23时」。
     表格是 fixed 布局 17 列均分，倒计时列内容区仅约 60px，此前 74px 会被右缘裁掉；
     配合 th 显式 width:76px 保证完整显示。width「非 min-width」保证三种徽章完全等宽。 */
  #uRows .cd-pill{width:60px;padding-left:3px;padding-right:3px;text-align:center;vertical-align:middle;box-sizing:border-box}
  /* 行内容垂直居中：胶囊把行撑高后，默认基线对齐的其他单元格文字会偏上，与居中的胶囊不齐 */
  #uRows td{vertical-align:middle}
  /* 根行「哨兵合约」独立背景：金色调与股东徽章同语言；展开态不再盖灰色，悬停也保持金色 */
  #uRows tr.u-root,
  #uRows tr.u-root:hover{background:var(--c-gold-bg)}
  #uRows tr.u-root td:first-child{border-left:3px solid var(--c-gold-line)}
  /* 手机端：17 列被 width:100%+fixed 布局硬挤进窄屏全被裁切，目录表保底 1020px 让容器横向滚动「桌面端容器更宽，无影响」 */
  #uTblWrap .utable{min-width:1020px}
  /* 表格滚动条细样式：默认 Chrome 滚动条又宽又灰，紧贴倒计时列右缘看着像裁切残留的阴影「与 .treebox 同款」 */
  #uTblWrap::-webkit-scrollbar{width:9px;height:9px}
  #uTblWrap::-webkit-scrollbar-thumb{background:var(--c-line);border-radius:5px}
  #uTblWrap::-webkit-scrollbar-thumb:hover{background:var(--c-line)}
  #uTblWrap::-webkit-scrollbar-track{background:transparent}
  #uTblWrap{scrollbar-width:thin;scrollbar-color:var(--c-line) transparent}
  .tbadge.tb-dorm{background:#ece7f8;color:#5e35b1}
  /* 状态圆点「替代 emoji，PC/手机字体无关」 */
  .stdot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;vertical-align:middle}
  .stdot-ok{background:#2e9e5b}
  .stdot-red{background:#d9534f}
  .ritem:last-child{margin-bottom:0}
  .rtitle{font-weight:700;font-size:13px;color:var(--c-ink);padding-bottom:6px;margin-bottom:5px;
          border-bottom:1px dashed var(--c-line2);word-break:break-all}
  .rtitle.center{text-align:center;word-break:keep-all}
  .raddr{display:flex;align-items:center;justify-content:center;gap:6px;padding-bottom:6px;margin-bottom:5px;
         border-bottom:1px dashed var(--c-line2);min-width:0}
  .raddr .ra{font-weight:700;font-size:12.5px;color:var(--c-ink);word-break:break-all;text-align:center;min-width:0}
  .raddr .ract{flex:none;display:flex;gap:4px}
  .raddr .ract a,.raddr .ract button{flex:none;font-size:10.5px;line-height:1;padding:4px 6px;border-radius:5px;
    border:1px solid var(--c-line2);background:var(--c-soft);color:var(--c-ink2);cursor:pointer;text-decoration:none;font-family:inherit}
  .raddr .ract a:hover,.raddr .ract button:hover{background:var(--c-line2);color:var(--c-ink)}
  .rgrid{display:grid;grid-template-columns:1fr 1fr;gap:3px 12px}
  .rrow{display:flex;align-items:baseline;justify-content:space-between;gap:8px;min-width:0}
  .rgrid > .rrow:nth-child(odd){padding-right:11px;border-right:1px solid var(--c-line2)}
  .rgrid > .rrow.rifull{grid-column:1/-1;border-right:none;padding-right:0}
  .rrow.rifull .rv{flex:1;min-width:0;text-align:left}
  .riline{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
  .riline+.riline{margin-top:3px}
  .riline .ril2{min-width:0;word-break:normal;overflow-wrap:anywhere}
  .riline{padding:2px 7px;border-radius:4px}
  .riline.rt0{background:var(--c-rl0)}
  .riline.rt1{background:var(--c-rl1)}
  .riline.rt2{background:var(--c-rl2)}
  .riline.rt3{background:var(--c-rl3)}
  .riline.rt4{background:var(--c-rl4)}
  .riline.rtS{background:var(--c-rlS)}
  .rrow .rk{color:var(--c-muted);font-size:11.5px;flex:none}
  .rrow .rv{color:var(--c-ink);font-size:12.5px;text-align:right;word-break:break-all;overflow-wrap:anywhere}
  .rrow .rv .st{font-size:11px}
  .rrow .rv .lock{border:1px solid var(--c-gold);background:var(--c-gold-bg);color:var(--c-gold);
                  border-radius:5px;padding:1px 6px;white-space:nowrap}
  @media(max-width:640px){
    .dgrid{gap:9px;margin-top:12px}
    .dgrid .dcard.half{grid-column:1/-1}   /* 手机端 5/6 卡恢复全宽，仓位行不再挤爆 */
    .dcard{padding:11px 11px 12px;border-radius:5px}
    .dcard > h3{font-size:12.5px;margin:0 0 7px;padding:0 0 6px;line-height:1.35}
    .dbody{font-size:12.5px;line-height:1.65}
    .dbody .sub{font-size:12px;line-height:1.65}
    .dbody .sub b{font-size:12.5px}
    .dbar{height:9px;margin:7px 0}
    .dbar > div{height:9px}
    .dcard .btn{padding:8px 6px;font-size:12.5px;min-height:38px}
    .ritem{padding:8px 10px;margin-bottom:7px}
    .rtitle{font-size:12.5px}
    .rgrid{gap:2px 10px}
    .rrow .rk{font-size:11px}
    .rrow .rv{font-size:12px}
  }

  #top{position:fixed;right:16px;bottom:16px;width:42px;height:42px;border:none;background:#f7941e;border-radius:50%;font-size:12px;cursor:pointer;display:none;color:#1c1b18;font-weight:700;padding:0}
  #refreshFab{position:fixed;left:16px;bottom:16px;width:42px;height:42px;border:none;background:#f7941e;border-radius:50%;font-size:12px;cursor:pointer;display:none;color:#1c1b18;font-weight:700;padding:0;z-index:98}
  #refreshFab.busy{animation:fabspin .8s linear infinite}
  @keyframes fabspin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}

  @media(max-width:640px){
    /* 用户目录手机端：导出按钮紧凑化、翻页条居中加大 */
    #statsPage .ufrow-2 .abtn{padding:9px 8px;font-size:12.5px;border-radius:5px;min-width:0}
    #statsPage .ufrow-2 .abtn{margin-left:0 !important}  /* 覆盖行内 margin-left:auto，消除手机端大空档 */
    #statsPage .row2{display:flex;justify-content:center;align-items:center;gap:14px;margin-top:10px}
    #statsPage .row2 .abtn{padding:10px 16px;font-size:13px}
    #statsPage .row2 .hint{font-size:12.5px}
    
  }
  @media(max-width:640px){
    h1{font-size:22px}header{padding-top:32px}
    /* 表格变卡片：一行一卡，字段名前置，不用横向滑动 */
    table,tbody,tr,td{display:block;width:100%}
    thead,tr:first-child{display:none}
    tr{border:1px solid var(--c-line2);border-radius:5px;background:var(--c-surface);margin:10px 0;padding:4px 0}
    td{display:flex;padding:5px 14px;border:none;font-size:14px}
    td:first-child{font-weight:600;padding-top:10px}
    td[data-l]::before{content:attr(data-l);flex:0 0 92px;color:var(--c-muted);font-size:13px;padding-right:10px}
    td .st{margin-left:0}
    .tblwrap{border:none;border-radius:5px;background:transparent;overflow:visible}
    .tblwrap table{min-width:0}
    .tblwrap tr:first-child{display:none}
    /* 顶部 TAB：两列排布，方便长按；导航横滑 */
    .tabbtn{flex:1 1 calc(50% - 8px);height:40px;padding:0 4px;font-size:14px;text-align:center;-webkit-touch-callout:none;user-select:none}
    nav.wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;white-space:nowrap;padding-bottom:6px}
    /* 多签管理：数据表恢复「真表格」并在卡片内横滑「表头保留、内容有序」 */
    #disPage table,#compResult table{display:table;width:100%}
    #disPage thead,#compResult thead{display:table-header-group}
    #disPage tbody,#compResult tbody{display:table-row-group}
    #disPage tr,#compResult tr,#disPage tr:first-child,#compResult tr:first-child{display:table-row;width:auto;border:none;background:transparent;margin:0;padding:0}
    #disPage th,#compResult th{display:table-cell}
    #disPage td,#compResult td{display:table-cell;width:auto;padding:6px 8px;font-size:12px}
    #disPage td:first-child,#compResult td:first-child{font-weight:400;padding-top:6px}
    #disPage .tblwrap,#compResult .tblwrap,#statsPage .tblwrap{border:1px solid var(--c-line2);border-radius:5px;background:var(--c-surface);overflow-x:auto;-webkit-overflow-scrolling:touch}
    #disPage .tblwrap table,#compResult .tblwrap table,#statsPage .tblwrap table{min-width:440px}
    #disPage table th,#disPage table td{white-space:nowrap}
    /* 用户数据总表：真表格 + 横滑 + 表头吸顶「VBK 数据总览同款」 */
    #statsPage table,#statsPage tbody,#statsPage tr,#statsPage td,#statsPage thead,#statsPage th{display:revert}
    #statsPage .tblwrap{display:block;overflow-x:auto;overflow-y:auto;max-height:60vh;border:1px solid var(--c-line2);border-radius:5px;background:var(--c-surface)}
    #statsPage .tblwrap table{min-width:920px;display:table;width:100%}
    /* 用户目录 17 列：920px 均分后每列仅 54px，日期/地址等宽内容全被裁。目录表单独加宽到 1080px，
       并给地址/入金时间/股东显式列宽「其余数字列均分 ~57px，全部留余量」；桌面端「>640px」不受影响 */
    #statsPage #uTblWrap table{min-width:1176px}
    #statsPage #uTblWrap th[data-k="a"]{width:150px}
    #statsPage #uTblWrap th[data-k="at"]{width:132px}
    #statsPage #uTblWrap th[data-k="slot"]{width:72px}
    #statsPage thead th{position:sticky;top:0;background:var(--c-soft);z-index:2;white-space:nowrap}
    #statsPage td{white-space:nowrap}
    #statsPage tr{display:table-row;width:auto;border:none;background:transparent;margin:0;padding:0}
    /* 全部输入控件 16px：防 iPhone 聚焦时自动放大整页「放大后按钮也会错位」 */
    input,select,textarea{font-size:16px !important}
    /* 用户目录筛选栏「手机」：第一行地址通栏，第二行状态 3 个，第三行级别 6 个 */
    #statsPage .ufilter{display:grid;grid-template-columns:1fr;gap:8px;align-items:stretch}
    #statsPage .ufilter .usearch{width:100%;max-width:none;flex:none;box-sizing:border-box}
    #statsPage .ufrow{display:grid;gap:6px}
    #statsPage .ufrow-3{grid-template-columns:repeat(3,minmax(0,1fr))}
    #statsPage .ufrow-2{grid-template-columns:repeat(2,minmax(0,1fr))}
    #statsPage .ufrow-4{grid-template-columns:repeat(2,minmax(0,1fr))}
    #statsPage .ufilter .uchip{width:100%;min-width:0;padding:8px 2px;font-size:12.5px;gap:3px;white-space:nowrap;overflow:hidden}
    /* 数据总览卡片：手机端单列，键左值右各占一行，彻底消除数值折行 */
    #statsPage .dgrid{grid-template-columns:1fr}
    #statsPage .kv{gap:12px}
    #statsPage .kv > .k{font-size:12.5px}
    #statsPage .kv > .v{font-size:13.5px}
    /* ===== 顶部 TAB：第一行 3 个主 TAB，第二行 2 个隐藏 TAB ===== */
    #tabBar{grid-template-columns:repeat(6,1fr);gap:8px;padding:8px}
    #tabDash,#tabDis,#tabVanity{grid-column:span 2}
    #tabStats,#tabDisperse{grid-column:span 3}
    .tabbtn{width:100%;padding:10px 6px;font-size:14px;text-align:center}
    /* 驾驶舱 / 补偿查询：按钮通栏、输入框不超宽 */
    #dashPage .btn,#compPage .btn{width:100%;display:block}
    #dashPage input,#dashPage select,#compPage input{max-width:100% !important}
    #dashPage select,#compPage input{width:100%}

    /* ============ 手机端统一规则「防溢出 / 好点按 / 不横滑」 ============ */
    /* 1) 防溢出总闸：任何元素不得超出容器 */
    #dashPage, #compPage, section.wrap { overflow-x: hidden; }
    #dashPage *, #compPage *, section.wrap * { max-width: 100%; box-sizing: border-box; }
    #dashPage .sub, #compPage .sub, section.wrap .sub,
    #dashPage p, #compPage p, section.wrap p,
    #dashPage td, #compPage td, #dashPage li, #compPage li,
    #dashPage div, #compPage div, section.wrap div {
      overflow-wrap: break-word; word-break: break-word; white-space: normal;
    }
    /* 地址 / 哈希：允许任意字符处断开「42 位地址不再撑破」 */
    #dashPage .mono, #compPage .mono, #dashPage input, #compPage input,
    #dashPage td, #compPage td, #compResult, section.wrap td {
      word-break: break-all; overflow-wrap: anywhere;
    }
    /* 团队结构树：豁免「防溢出总闸」；手机端整行换行铺开「不再溢出遮盖，复制/打开/徽章全部可见」 */
    #dashPage .treebox *, #statsPage .treebox * {
      max-width: none;
      word-break: normal; overflow-wrap: normal;
    }
    #dashPage .treebox, #statsPage .treebox { overflow: auto; max-height: min(62vh,480px); }
    #dashPage .treebox .trow, #statsPage .treebox .trow,
    .treebox .trow, div[id^="dtree-"] .trow {
      flex-wrap: wrap !important; white-space: normal !important;
      width: 100% !important; min-width: 0 !important; row-gap: 3px;
    }
    #dashPage .treebox .taddr, #statsPage .treebox .taddr,
    .treebox .taddr, div[id^="dtree-"] .taddr { white-space: nowrap !important; }
    div[id^="dtree-"] { width: 100% !important; min-width: 0 !important; }
    /* 树行两段式：第一行=三角+地址+复制/打开，第二行=徽章+仓位/压仓/日期/直推「缩进对齐地址，整齐不乱」 */
    #dashPage .treebox .trow .tmeta, #statsPage .treebox .trow .tmeta,
    .treebox .trow .tmeta, div[id^="dtree-"] .trow .tmeta {
      display: flex !important; flex-basis: 100% !important;
      flex-wrap: wrap; align-items: center; column-gap: 10px; row-gap: 3px;
      padding-left: 30px;
    }
    /* 团队结构统计：手机端固定 4 个一行「直推/团队/V1/V2 一行，V3/V4/V5 一行」 */
    .dstats { display: grid; grid-template-columns: repeat(4, max-content); justify-content: flex-start; gap: 3px 14px; }

    /* 2) 标题：色条 + 折行 */
    #dashPage h2, #compPage h2, section.wrap h2 { font-size: 19px; line-height: 1.35; }
    #dashPage h3, #compPage h3, section.wrap h3 {
      font-size: 15.5px; margin: 22px 0 8px; padding-left: 10px;
      border-left: 3px solid var(--c-accent); line-height: 1.45; white-space: normal;
    }
    #dashPage .sub, #compPage .sub, section.wrap .sub { font-size: 13px; line-height: 1.7; }

    /* 3) 表单控件 */
    #dashPage input, #dashPage select, #compPage input, #compPage select {
      width: 100% !important; min-height: 46px; border-radius:5px;
      padding: 12px !important; font-size: 16px !important;
    }
    #dashPage .btn, #compPage .btn {
      width: 100%; display: block; min-height: 46px; font-size: 15px;
      border-radius:5px; margin-top: 10px; white-space: normal; line-height: 1.4;
    }
    #dashPage .row2 { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
    #dashPage .row2 .btn {
      width: auto !important; flex: 1 1 calc(50% - 4px); min-width: 0;
      margin-top: 0; padding: 12px 6px; font-size: 14px;
    }

    /* 6) 内容区表格「方案对比等」：与 PC 同样的表格形态，卡内左右滑动 */
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap {
      border: 1px solid var(--c-line2); border-radius:5px; background: var(--c-surface);
      overflow-x: auto; -webkit-overflow-scrolling: touch;
      position: relative;
    }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) table {
      display: table; width: auto; min-width: 100%; border-collapse: collapse;
    }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) thead { display: table-header-group; }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) tbody { display: table-row-group; }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) tr { display: table-row; }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) th,
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) td {
      display: table-cell; padding: 9px 10px; font-size: 12.5px; line-height: 1.6;
      white-space: normal; word-break: normal; overflow-wrap: break-word;
      border-bottom: 1px solid var(--c-line2);
    }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) th { background: var(--c-soft); white-space: nowrap; }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) td:first-child,
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) th:first-child { white-space: nowrap; }
    /* 各区块表格的最小宽度：让表格保持可读列宽，超出部分卡内横滑 */
    #s1 table { min-width: 520px; }
    #s2 table { min-width: 460px; }
    #s5 table { min-width: 420px; }
    #s6 table { min-width: 480px; }
    #s7 table { min-width: 460px; }
    #s8 table { min-width: 440px; }
    #s9 table { min-width: 700px; }
    #s9b table { min-width: 640px; }
    #s3 table { min-width: 480px; }
    #s4 table { min-width: 460px; }
    #s10 table { min-width: 460px; }

    /* 7) 补偿查询：月度明细表横滑 */
    #compResult .tblwrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
    #compResult table { min-width: 460px; }
    #compResult table th,
    #compResult table td {
      white-space: nowrap; word-break: keep-all; overflow-wrap: normal;
      font-size: 12.5px; padding: 9px 10px;
    }
    /* 多签管理页表格保持原样「已有独立规则」 */

    /* 8) 说明块 / 结果卡 */
    #dashFeeTip { font-size: 13px !important; line-height: 1.75 !important; border-radius:5px; }
    #compResult > div { padding: 14px !important; }
    #compResult ul { padding-left: 16px !important; margin: 8px 0 0 !important; }
    #compResult li { font-size: 13.5px; line-height: 1.8; margin-bottom: 6px; }
    #compResult .big { font-size: 18px !important; line-height: 1.45; }

    /* 9) 返回链接 → 块级按钮 */
    #dashPage .re, #compPage .re {
      display: block; text-align: center; padding: 12px 16px;
      border: 1px solid var(--c-line); border-radius:5px; background: var(--c-surface);
      font-size: 14px; margin-top: 10px; text-decoration: none;
    }

    /* 10) 汉堡菜单内的 TAB：6 栅格，两行各 3 个「各 2/6」 */
    #tabBar { grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 6px; padding: 8px; }
    #tabDash, #tabDis, #tabVanity { grid-column: span 2; }
    #tabStats, #tabDisperse { grid-column: span 3; }
    .tabbtn { width: 100%; height: 40px; padding: 0 4px; font-size: 14px; text-align: center; white-space: nowrap; line-height: 1.3; }

    /* ============ 方案对比：手机端表格改为「一卡一行」，不再横向裁切 ============ */
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap {
      border: 0; border-radius:5px; background: transparent; overflow: visible; padding: 0;
    }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap table {
      display: block; width: 100% !important; min-width: 0 !important; border-collapse: separate;
    }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap thead { display: none; }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap tbody { display: block; }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap tr {
      display: block; border: 1px solid var(--c-line2); border-radius:5px; background: var(--c-surface);
      margin: 0 0 8px; padding: 9px 11px; box-sizing: border-box;
    }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap tr:last-child { margin-bottom: 0; }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap td {
      display: flex; align-items: baseline; justify-content: space-between; gap: 10px;
      width: auto !important; border: 0; padding: 2px 0; min-width: 0;
      font-size: 12.5px; line-height: 1.6; white-space: normal !important;
      word-break: break-word; overflow-wrap: anywhere; text-align: right;
    }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap td[data-l]::before {
      content: attr(data-l); flex: none; font-size: 11px; font-weight: 400;
      letter-spacing: 0; color: var(--c-muted); text-align: left;
    }
    /* 无字段名「长文本」的格子：整行左对齐 */
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap td:not([data-l]) {
      display: block; text-align: left; padding-top: 4px;
    }
    /* 第一格「日期 / 档位 / 轮次」作为卡片标题 */
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap td:first-child {
      display: block; text-align: left; font-weight: 700; font-size: 13px; color: var(--c-ink);
      padding: 0 0 5px; border-bottom: 1px dashed var(--c-line2); margin-bottom: 5px;
    }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap td:first-child::before { display: none; }
    :is(#s1, #s2, #s3, #s4, #s5, #s6, #s7, #s8, #s9, #s9b, #s10) .tblwrap td .st { margin-left: 0; }
    /* 表格里嵌套的「答案」卡不要被压窄 */
    #s3 .answer table, #s3 .answer .tblwrap { margin-top: 8px; }

  }

/* ================================================================
   第二部分 · 靓号生成页 #vanityPage「排版 1:1 对齐 XOL：多目标并行 + 每行命中徽标」
   ================================================================ */
  /* ===== 靓号生成：排版 1:1 对齐 XOL「多目标并行 + 每行命中徽标」 ===== */
  #vanityPage .vcard{background:var(--c-surface);border:1px solid var(--c-line);border-radius:5px;
    box-shadow:0 10px 30px -24px rgba(0,0,0,.4);padding:18px;margin-bottom:18px}
  #vanityPage .vcard > h2{display:flex;align-items:center;gap:9px;font-size:15px;
    margin:0 0 12px;font-weight:600;color:var(--c-ink)}
  #vanityPage .vcard > h2::before{content:'';width:3px;height:15px;border-radius:5px;flex:none;
    background:linear-gradient(180deg,var(--c-gold-line),var(--c-accent))}
  #vanityPage .vhint{font-size:12.5px;color:var(--c-muted);margin:-4px 0 12px;line-height:1.65}

  /* ---- 条件行 ---- */
  #vanityPage .vwRule{display:flex;gap:8px;align-items:center;margin-bottom:8px;flex-wrap:wrap;
    padding:10px 12px;border:1px solid var(--c-line2);border-radius:5px;background:var(--c-soft)}
  #vanityPage .vwRuleNo{min-width:46px;flex:none;font-weight:700;color:var(--c-muted);
    white-space:nowrap;font-size:12.5px}
  #vanityPage .vwInp{flex:1 1 130px;min-width:0;height:38px;padding:0 12px;border-radius:5px;
    border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink);font-size:13px;
    font-family:Consolas,Menlo,monospace;outline:none;transition:border-color .15s}
  #vanityPage .vwInp:focus{border-color:var(--c-accent)}
  #vanityPage .vwInp::placeholder{color:var(--c-muted2);opacity:.85;font-size:12.5px}
  #vanityPage .vwHitBadge{flex:none;min-width:132px;height:38px;max-width:100%;
    display:inline-flex;align-items:center;justify-content:center;padding:0 14px;border-radius:5px;
    border:1px solid var(--c-line);background:rgba(128,128,128,.06);color:var(--c-muted);
    font-size:12.5px;font-weight:700;white-space:nowrap;transition:all .15s}
  #vanityPage .vwHitBadge.hit{border-color:rgba(46,158,99,.55);background:rgba(46,158,99,.14);
    color:var(--c-ok);cursor:pointer;min-width:172px;font-size:12px;letter-spacing:-.2px}
  #vanityPage .vwHitBadge.searching{border-color:rgba(138,90,43,.5);color:var(--c-accent);
    background-color:rgba(138,90,43,.08);
    background-image:linear-gradient(100deg,transparent 18%,rgba(138,90,43,.22) 50%,transparent 82%);
    background-size:220% 100%;background-repeat:no-repeat;
    animation:vwSweep 1.45s linear infinite}
  #vanityPage .vwHitBadge .vwMag{display:inline-block;margin-right:5px;font-size:13px;line-height:1;
    animation:vwMagSeek 1.45s ease-in-out infinite}
  #vanityPage .vwHitBadge.paused{border-color:rgba(138,90,43,.35);color:var(--c-muted);
    background:rgba(128,128,128,.06)}
  #vanityPage .vwHitBadge.paused .vwMag{animation:none;opacity:.8}
  @keyframes vwSweep{from{background-position:160% 0}to{background-position:-60% 0}}
  @keyframes vwMagSeek{0%{transform:translateX(-3px) rotate(-14deg)}
    35%{transform:translateX(2px) rotate(6deg) scale(1.08)}
    70%{transform:translateX(3px) rotate(12deg)}100%{transform:translateX(-3px) rotate(-14deg)}}
  @media (prefers-reduced-motion: reduce){
    #vanityPage .vwHitBadge.searching,
    #vanityPage .vwHitBadge .vwMag{animation:none}
  }
  /* 注意：按钮同时带 .vbtn.sm，它的 width/height/font-size 优先级更高，
     所以这里必须写成 .vbtn.sm.vwDel 才能盖住「PC 端同样适用」 */
  #vanityPage .vbtn.sm.vwDel{flex:none;width:52px;height:38px;min-width:52px;padding:0;
    display:inline-flex;align-items:center;justify-content:center;border-radius:5px;
    font-size:19px;font-weight:700;line-height:1;color:var(--c-muted);background:transparent;
    border:1px solid var(--c-line);cursor:pointer}
  #vanityPage .vbtn.sm.vwDel:hover{border-color:var(--c-danger);color:var(--c-danger);background:rgba(162,77,46,.08)}
  #vanityPage .vbtn.sm.vwDel:disabled{opacity:.35;cursor:not-allowed}

  /* ---- 按钮 / 行 ---- */
  #vanityPage .vrow{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
  #vanityPage .vbtn,#vMask .vbtn{border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink2);
    font-family:inherit;font-size:13px;font-weight:600;padding:8px 16px;border-radius:5px;
    cursor:pointer;transition:all .15s}
  #vanityPage .vbtn:hover,#vMask .vbtn:hover{border-color:var(--c-accent);color:var(--c-accent)}
  #vanityPage .vbtn:disabled,#vMask .vbtn:disabled{opacity:.42;cursor:not-allowed}
  #vanityPage .vbtn.sm,#vMask .vbtn.sm{padding:0;height:38px;width:38px;border-radius:5px;font-size:14px;font-weight:400}
  #vanityPage .vbtn.primary,#vMask .vbtn.primary{background:var(--c-ink);border-color:var(--c-ink);color:var(--c-bg)}
  #vanityPage .vbtn.primary:hover,#vMask .vbtn.primary:hover{background:var(--c-ink-hover);border-color:var(--c-ink-hover);color:var(--c-bg)}
  #vanityPage .vbtn.danger:hover,#vMask .vbtn.danger:hover{border-color:var(--c-danger);color:var(--c-danger)}

  /* ---- 生成方式：三栏分布 ---- */
  #vanityPage .vanity-opts{justify-content:space-between;margin-bottom:12px}
  #vanityPage .vanity-opts .check{flex:1;display:flex;align-items:center;gap:6px;
    font-size:12.5px;color:var(--c-ink3);cursor:pointer}
  #vanityPage .vanity-opts .check:first-child{justify-content:flex-start}
  #vanityPage .vanity-opts .check:nth-child(2){justify-content:center}
  #vanityPage .vanity-opts .check:last-child{justify-content:flex-end}
  #vanityPage .vanity-opts input{accent-color:var(--c-accent)}

  /* ---- 线程滑杆 ---- */
  #vanityPage .thread-slider{display:flex;align-items:center;gap:12px;margin-bottom:12px}
  #vanityPage .thread-slider .lbl{font-size:12.5px;color:var(--c-ink2);white-space:nowrap;margin:0}
  #vanityPage .thread-slider input[type=range]{flex:1;min-width:0;accent-color:var(--c-accent)}
  #vanityPage .thread-slider .tv{font-family:Consolas,monospace;font-size:13px;
    width:34px;text-align:center;color:var(--c-ink)}

  /* ---- 控制按钮 ---- */
  #vanityPage .controls{display:flex;gap:9px;flex-wrap:wrap;margin-top:4px}
  #vanityPage .vaddrow{display:flex;gap:9px;flex-wrap:wrap;margin:0 0 12px}

  /* ---- 统计格 ---- */
  /* 固定 6 列：正好 6 个统计格铺满一行，不会在右边留空轨 */
  #vanityPage .stat-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));
    gap:12px;margin-top:14px}
  #vanityPage .stat{background:var(--c-soft);border:1px solid var(--c-line2);border-radius:5px;padding:12px 14px}
  #vanityPage .stat .label{font-size:11.5px;color:var(--c-muted);margin-bottom:4px}
  #vanityPage .stat .value{font-size:17px;font-weight:700;font-family:Consolas,monospace;
    word-break:break-all;color:var(--c-ink)}
  #vanityPage .stat .value.sm{font-size:13px}
  #vanityPage .difficulty-row{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;
    color:var(--c-muted);margin:8px 0}
  #vanityPage .vnote{grid-column:1/-1;font-size:11.5px;line-height:1.75;color:var(--c-muted);
    border-top:1px dashed var(--c-line2);padding-top:10px;margin-top:2px}
  #vanityPage .difficulty-row b{color:var(--c-ink);font-family:Consolas,monospace}

  /* ---- 命中弹窗 ---- */
  /* 弹窗在手机端也要居中「.wmask 手机端默认是底部弹出，这里覆盖回来」 */
  #vMask,#cfgMask{align-items:center !important;justify-content:center !important;padding:16px !important}
  #vMask .vmbox,#cfgMask .vmbox,#msgMask .vmbox,#wireMask .vmbox{width:100%;max-width:420px;max-height:calc(100% - 32px);display:flex;flex-direction:column;
    background:var(--c-surface);border:1px solid var(--c-line2);border-radius:5px;overflow:hidden;
    box-shadow:0 24px 60px rgba(0,0,0,.28)}
  #vMask .vmhead,#cfgMask .vmhead,#msgMask .vmhead,#wireMask .vmhead{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;
    padding:16px 18px 10px;border-bottom:1px solid var(--c-line2)}
  #vMask .vmk,#cfgMask .vmk,#msgMask .vmk,#wireMask .vmk{font-size:10.5px;letter-spacing:1.8px;color:var(--c-muted)}
  #vMask .vmt,#cfgMask .vmt,#msgMask .vmt,#wireMask .vmt{font-size:16px;font-weight:700;color:var(--c-ink);margin-top:2px}
  #vMask .vmx,#cfgMask .vmx,#msgMask .vmx,#wireMask .vmx{border:0;background:transparent;font-size:18px;line-height:1;color:var(--c-muted);
    cursor:pointer;padding:2px 4px}
  #vMask .vmx:hover,#cfgMask .vmx:hover{color:var(--c-ink)}
  #vMask .vmbody,#cfgMask .vmbody,#msgMask .vmbody,#wireMask .vmbody{padding:14px 18px 18px;overflow:auto}
  #msgMask .vmok{margin-top:16px;width:100%;border:none;background:var(--c-btn);color:var(--c-btn-ink);
    padding:11px 18px;font-size:13.5px;font-weight:600;border-radius:5px;cursor:pointer;font-family:inherit}
  #msgMask .vmok:hover{filter:brightness(1.06)}
  #msgMask .vmok:active{transform:translateY(.5px)}
  #vMask .vmqr{text-align:center;margin-bottom:12px}
  #vMask .vmqr .vqbox{display:inline-block;background:#fff;padding:10px;border-radius:5px;
    border:1px solid var(--c-line2)}
  #vMask .vmqr .vqtip{font-size:10.5px;color:var(--c-muted2);margin-top:6px;letter-spacing:-.1px}
  #vMask .vmkv{display:flex;flex-direction:column;gap:8px}
  #vMask .vmkv .k{font-size:11.5px;color:var(--c-muted)}
  #vMask .vmkv .v{font-family:Consolas,monospace;font-size:13px;color:var(--c-ink);
    word-break:break-all;line-height:1.6}
  #vMask .vmkv .v.ok{color:var(--c-ok);font-weight:700}
  #vMask .vmbtns{display:flex;gap:8px;margin-top:14px}
  #vMask .vmbtns .vbtn{flex:1;text-align:center}

  /* ---- 手机端：与 PC 完全同构，仅按 XOL 断点换栅格 ---- */
  @media (max-width:700px){
    #vanityPage .vwRule{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
      grid-template-areas:"no no no" "cont pre suf" "badge badge del";gap:8px;padding:10px}
    #vanityPage .vwRuleNo{grid-area:no;min-width:0;font-size:14px}
    #vanityPage .vwInp:nth-of-type(1){grid-area:cont}
    #vanityPage .vwInp:nth-of-type(2){grid-area:pre}
    #vanityPage .vwInp:nth-of-type(3){grid-area:suf}
    /* 输入文字保持 16px「iOS 聚焦不放大」；占位文字放到 13px，三列仍放得下 */
    #vanityPage .vwInp{height:42px;font-size:16px !important;width:100%;padding:0 8px;letter-spacing:-.2px}
    #vanityPage .vwInp::placeholder{font-size:13px;letter-spacing:-.3px}
    #vanityPage .vwHitBadge{grid-area:badge;width:100%;min-width:0;height:42px}
    /* .vbtn.sm 的 38px 优先级更高，这里必须用 .vbtn.sm.vwDel 才能铺满格子 */
    #vanityPage .vbtn.sm.vwDel{grid-area:del;width:100%;min-width:0;height:42px;
      justify-self:stretch;font-size:22px;font-weight:700;line-height:1;border-radius:5px}
      #vanityPage .vaddrow{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:0 0 12px}
    #vanityPage .vaddrow .vbtn{width:100%;height:42px;font-size:13.5px}
    #vanityPage #vRowCount{display:block;width:100%;margin:6px 0 0 0 !important;text-align:center}
    #vanityPage .controls{display:grid;grid-template-columns:1fr 1fr}
    #vanityPage .controls .vbtn{width:100%}
    #vanityPage .stat .value{font-size:15px}
    #vanityPage .stat .value.sm{font-size:12.5px}
    #vanityPage .stat-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
    #vanityPage .vcard{padding:14px 12px;border-radius:5px}
    #vanityPage .thread-slider .lbl{font-size:11.5px}
  }
  @media (max-width:380px){
    #vanityPage .vwRule{gap:6px}
    #vanityPage .vwInp{font-size:12.5px;padding:0 7px}
    #vanityPage .vwInp::placeholder{font-size:10.5px}
  }

/* ================================================================
   第三部分 · 多签管理页 #disPage（签名弹窗 / OW 列表 / 配置弹窗 / 批量设定级别）
   ================================================================ */
  #disPage .card2 { border: 1px solid var(--c-line); border-radius:5px; background: var(--c-surface); padding: 16px; margin-top: 14px; }
  #disPage .card2 > h2 { margin: 0 0 12px; font-size: 17px; }
  #disPage .badge { display: inline-block; padding: 1px 10px; border-radius:5px; background: var(--c-btn); color: var(--c-btn-ink); font-size: 12px; vertical-align: middle; }
  #disPage .mode-tabs { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 4px; }
  #disPage .mode-tab { border: 1px solid var(--c-line); background: var(--c-surface); color: var(--c-ink2); padding: 8px 14px; font-size: 13px; border-radius:5px; cursor: pointer; }
  /* 兜底：多签页所有按钮都有前景色「否则深色下浏览器默认黑字会看不见」 */
  #disPage .btn{color:var(--c-ink2)}
  #disPage .mode-tab:hover { color: var(--c-accent); border-color: var(--c-accent); }
  #disPage .mode-tab.active { background: var(--c-btn); color: var(--c-btn-ink); border-color: var(--c-btn); }
  #disPage .field { display: block; margin-top: 10px; }
  #disPage .field .lbl { display: block; font-size: 12px; color: var(--c-ink2); margin-bottom: 4px; }
  #disPage .field input, #disPage .field textarea, #disPage .field select { width: 100%; max-width: 100%; box-sizing: border-box; padding: 10px 12px; font-size: 13px; border: 1px solid var(--c-line); border-radius:5px; background: var(--c-surface); color: var(--c-ink); font-family: Consolas, monospace; }
  #disPage .row2 { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 12px; }
  /* 分发表单：一行三列「三个元素」，**移动端也保持三列并排**「只缩小字号/内距，不换行」 */
  /* 统一控件高度：文件框 / 文本框 / 按钮三者必须完全等高，否则底边对不齐 */
  /* 三列等宽：与上方「OW 管理 / 补偿分发 / 合约调用」页签同样的一分为三 */
  #disPage .payrow3 { --ph: 40px; display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 10px; align-items: end; margin-top: 12px; }
  #disPage .payrow3 > * { min-width: 0; }
  /* 每个格子都是「标签 + 控件」的纵向 flex，控件靠底部「justify-content:flex-end」，
     标签高度不同「左两行、右一行」也不会影响控件对齐 */
  #disPage .payrow3 .field { margin-top: 0; display: flex; flex-direction: column; justify-content: flex-end; height: 100%; }
  #disPage .payrow3 .lbl { line-height: 1.35; }
  /* 三者统一高度 + 统一边框盒，底边必然齐平 */
  #disPage .payrow3 .field input,
  #disPage .payrow3 .paybtn,
  #disPage .payrow3 .paybox { height: var(--ph); box-sizing: border-box; margin: 0; }
  #disPage .payrow3 .paybtn { width: 100%; padding: 0 16px; font-size: 13px; border-radius: 5px; white-space: nowrap; display: inline-flex; align-items: center; justify-content: center; }
  #disPage .payrow3 .paybox { display: flex; align-items: center; padding: 0 2px; height: auto; min-height: var(--ph); }
  /* 文本框：去掉纵向内距「高度已固定，靠 input 自身垂直居中」，避免与文件框高度算法不一致 */
  #disPage .payrow3 .field input:not([type=file]) { padding: 0 12px; }
  /* 文件按钮：纯按钮式「原生 input 用 display:none 彻底移除，由 JS 触发 click」
     这样绝不会出现「选择文件 + 未选择任何文件」的原生双段样式 */
  #disPage .payrow3 .filebtn {
    width: 100%; height: var(--ph); box-sizing: border-box; margin: 0;
    padding: 0 12px; font-size: 13px; font-weight: 600; border-radius: 5px;
    border: 1px solid transparent; cursor: pointer;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    display: inline-flex; align-items: center; justify-content: center;
    /* 未导入：主题主按钮色「浅色=墨黑 / 深色=橙」，保证两种背景都醒目 */
    background: var(--c-btn); color: var(--c-btn-ink);
    transition: background .15s, color .15s, opacity .15s;
  }
  #disPage .payrow3 .filebtn:hover { opacity: .88; }
  /* 已导入：绿色实心「浅色深绿白字 / 深色亮绿深字」，用主题变量自动适配 */
  #disPage .payrow3 .filebtn.loaded {
    background: var(--c-ok); color: var(--c-ok-ink); border-color: var(--c-ok);
  }
  /* 按钮横排容器：未导入文件 + 链上一键加载（股东/等级）同行等宽，避免纵向堆叠溢出字段框 */
  #disPage .payrow3 .fbtnrow { display: flex; gap: 8px; min-width: 0; }
  #disPage .payrow3 .fbtnrow .filebtn { flex: 1 1 0; min-width: 0; width: auto; }
  /* 平板/手机：改单列堆叠——提示文字较长，三列会截断/换行爆炸；控件通栏更好点按 */
  @media(max-width:900px){
    #disPage .payrow3 { --ph: 38px; grid-template-columns: 1fr; gap: 8px; margin-top: 10px; }
    #disPage .payrow3 .lbl { font-size: 11.5px; line-height: 1.35; margin-bottom: 3px; }
    #disPage .payrow3 .field input { padding: 0 10px; font-size: 12.5px; }
    #disPage .payrow3 .filebtn { font-size: 12.5px; padding: 0 10px; }
    #disPage .payrow3 .paybtn { padding: 0 12px; font-size: 13px; }
  }
  /* 极窄屏「<380px」：继续单列，仅再压字号 */
  @media(max-width:380px){
    #disPage .payrow3 { --ph: 36px; grid-template-columns: 1fr; gap: 6px; }
    #disPage .payrow3 .lbl { font-size: 11px; }
    #disPage .payrow3 .filebtn { font-size: 11.5px; padding: 0 8px; }
    #disPage .payrow3 .field input { padding: 0 8px; font-size: 12px; }
    #disPage .payrow3 .paybtn { padding: 0 10px; font-size: 12.5px; }
  }
  /* 补偿基金：10/30/60 分账计算器「本地计算，不影响链上口径」 */
  #disPage .splithead { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
  #disPage .splithead-t { font-size: 12.5px; font-weight: 700; color: var(--c-ink); letter-spacing: .3px; }
  #disPage .splitgrid { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 10px; align-items: end; }
  #disPage .splitgrid .field { margin-top: 0; display: flex; flex-direction: column; justify-content: flex-end; }
  #disPage .splitgrid .lbl { display: block; font-size: 12px; color: var(--c-ink2); margin-bottom: 4px; line-height: 1.35; }
  #disPage .splitgrid .field input { height: 40px; box-sizing: border-box; padding: 0 12px; }
  #disPage .splitcell { display: flex; flex-direction: column; justify-content: flex-end; min-width: 0; }
  #disPage .splitval {
    height: 40px; box-sizing: border-box; display: flex; align-items: center;
    padding: 0 12px; font-size: 13px; font-family: Consolas, monospace;
    border: 1px solid var(--c-line); border-radius: 5px;
    background: var(--c-soft); color: var(--c-ink);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  #disPage .splitfoot { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 10px; }
  /* 分流开关：炫酷渐变 + 呼吸光 + 扫光「与 .dlink 一致」 */
  #disPage .sw-toggle { display:inline-block; width:44px; height:22px; border-radius:11px;
    position:relative; cursor:pointer; vertical-align:middle; flex:0 0 auto; overflow:hidden; isolation:isolate;
    border:1px solid rgba(255,255,255,.16);
    background-image:linear-gradient(165deg,#5b5b63 0%,#3c3c44 55%,#2a2a30 100%);
    box-shadow:0 1px 0 rgba(255,255,255,.14) inset, 0 2px 8px rgba(0,0,0,.28);
    transition:background .18s ease, box-shadow .2s ease, border-color .2s ease; }
  #disPage .sw-toggle::before { content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
    background-image:radial-gradient(130% 120% at 50% 132%, rgba(180,255,215,.85) 0%, rgba(180,255,215,.22) 38%, transparent 68%);
    opacity:0; transition:opacity .2s ease; }
  #disPage .sw-toggle.on { background-image:linear-gradient(165deg,#3d8a5f 0%,#2a6344 55%,#194029 100%);
    border-color:rgba(190,255,220,.45);
    box-shadow:0 1px 0 rgba(255,255,255,.20) inset, 0 0 14px rgba(60,170,110,.55), 0 3px 12px rgba(25,64,41,.4); }
  #disPage .sw-toggle.on::before { opacity:1; animation:dlinkBreath 3.8s ease-in-out infinite; }
  #disPage .sw-toggle.on::after { content:""; position:absolute; top:-30%; left:-55%; width:38%; height:160%; z-index:1; pointer-events:none;
    background-image:linear-gradient(100deg,transparent 0%,rgba(255,255,255,.5) 50%,transparent 100%);
    transform:skewX(-20deg); animation:dlinkSweep 6s cubic-bezier(.4,0,.2,1) infinite; }
  #disPage .sw-toggle .sw-knob { position:absolute; top:2px; left:2px; width:18px; height:18px; z-index:2;
    border-radius:50%; background:#fff; box-shadow:0 1px 3px rgba(0,0,0,.45); transition:left .18s ease; }
  #disPage .sw-toggle.on .sw-knob { left:24px; }
  @media (prefers-reduced-motion:reduce){
    #disPage .sw-toggle::before, #disPage .sw-toggle.on::after { animation:none; }
    #disPage .sw-toggle::before { opacity:.55; }
    #disPage .sw-toggle.on::after { display:none; }
  }
  #disPage .dis-actbox { flex: 0 0 auto; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; border: 1px solid var(--c-line); border-radius: 5px; background: var(--c-surface); padding: 10px 12px; }
  #disPage .dis-actbox .act-switch { display: flex; align-items: center; justify-content: center; gap: 5px; }
  #disPage .dis-actbox .dlink { margin: 0; }
  @media(max-width:900px){
    #disPage .foldhead { padding: 9px 10px; font-size: 12px; }
    #disPage .foldsub { font-size: 11px; }
  }
  @media(max-width:380px){
    #disPage .foldhead { font-size: 11px; gap: 6px; }
    #disPage .foldsub { display: none; }
  }
  @media(max-width:900px){
    #disPage .splitgrid { grid-template-columns: minmax(0,1fr) repeat(3, minmax(0,1fr)); gap: 6px; }
    #disPage .splitgrid .lbl { font-size: 10.5px; }
    #disPage .splitgrid .field input,
    #disPage .splitval { height: 34px; padding: 0 7px; font-size: 11px; }
  }
  @media(max-width:380px){
    #disPage .splitgrid { grid-template-columns: minmax(0,1fr) repeat(3, minmax(0,1fr)); gap: 4px; }
    #disPage .splitgrid .lbl { font-size: 9.5px; }
    #disPage .splitgrid .field input,
    #disPage .splitval { height: 30px; padding: 0 5px; font-size: 10px; }
  }
  #disPage .hint { font-size: 12px; color: var(--c-ink2); min-height: 16px; }
  #disPage .hint.err2 { color: var(--c-danger); }
  #disPage .smallgray { font-size: 11px; color: var(--c-muted2); margin-top: 16px; }
  #disPage table { width: 100%; border-collapse: collapse; font-size: 12px; }
  #disPage table th, #disPage table td { border-bottom: 1px solid var(--c-line2); padding: 6px 8px; text-align: left; }
  #disPage .btndis { opacity: .45; cursor: not-allowed; }
  #disPage input[readonly] { background: var(--c-soft); }
  /* 合约地址行：加粗名称 + 完整地址直接展示「可自动换行」 */
  #disPage .addrline { margin-top: 10px; font-size: 13px; line-height: 1.8; word-break: break-all; }
  #disPage .addrline b { font-weight: 700; color: var(--c-ink); }
  #disPage .addrline span { font-family: Consolas, monospace; color: var(--c-ink2); }
  #disPage .dis-toprow { display: flex; gap: 12px; align-items: stretch; margin: 0 0 10px; }
  #disPage .dis-balbox { flex: 0 0 200px; border: 1px solid var(--c-line); border-radius: 5px; background: var(--c-surface); display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 10px 12px; text-align: center; }
  #disPage .dis-balbox .db-lbl { font-size: 12px; color: var(--c-ink2); line-height: 1.5; }
  #disPage .dis-balbox .db-val { font-family: Consolas, monospace; line-height: 1.5; margin-top: 2px; }
  #disPage .dis-balbox .db-val b { font-size: 18px; font-weight: 700; color: var(--c-accent); }
  #disPage .dis-balbox .db-unit { font-size: 12px; color: var(--c-ink2); margin-left: 3px; }
  #disPage .dis-addrwrap { flex: 1 1 auto; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; border: 1px solid var(--c-line); border-radius: 5px; background: var(--c-surface); padding: 8px 10px; }
  #disPage .dis-addrwrap .addrline { margin-top: 0; }
  @media (max-width: 560px) { #disPage .dis-toprow { flex-wrap: wrap; } #disPage .dis-balbox, #disPage .dis-actbox { flex: 1 1 0; min-width: 0; } #disPage .dis-addrwrap { flex: 1 1 100%; } #disPage .dis-toprow.noact .dis-balbox { flex: 1 1 100%; } }
  /* ===== 批量设定级别「每行：序号 + 地址 + 级别 + 删除」 ===== */
  .lvbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
  .lvbar .vbtn{height:38px;padding:0 14px;border-radius:10px;font-size:12.5px}
  .lvfile{position:relative;overflow:hidden;display:inline-flex;align-items:center;
          border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink2);cursor:pointer}
  .lvfile input{position:absolute;inset:0;opacity:0;cursor:pointer;font-size:0}
  .lvrow{display:grid;grid-template-columns:34px minmax(0,1fr) 96px 40px;gap:8px;
         align-items:center;margin-bottom:8px}
  .lvno{font-size:12px;color:var(--c-muted);text-align:center}
  .lvrow .lvaddr,.lvrow .lvlv{height:38px;box-sizing:border-box;padding:0 10px;
         border:1px solid var(--c-line);border-radius:10px;background:var(--c-surface);
         color:var(--c-ink);font-size:13px}
  .lvrow .lvaddr{width:100%;font-family:Consolas,monospace}
  .lvrow .lvlv{width:100%;font-family:inherit}
  .lvrow .lvdel{width:40px;height:38px;min-width:40px;padding:0;border-radius:10px;
         font-size:18px;font-weight:700;line-height:1;
         border:1px solid var(--c-line);background:transparent;color:var(--c-muted);cursor:pointer}
  .lvrow .lvdel:hover{border-color:var(--c-danger);color:var(--c-danger)}
  @media(max-width:640px){
    .lvrow{grid-template-columns:22px minmax(0,1fr) 74px 40px;gap:6px}
    .lvrow .lvaddr,.lvrow .lvlv{height:42px;padding:0 8px;font-size:13px}
    .lvrow .lvdel{height:42px}
    .lvbar .vbtn{flex:1 1 calc(50% - 4px);justify-content:center}
    .lvbar .hint{flex:1 1 100%;text-align:center}
  }
  .dnrow{display:grid;grid-template-columns:34px minmax(0,1fr) 40px;gap:8px;
         align-items:center;margin-bottom:8px}
  .dnno{font-size:12px;color:var(--c-muted);text-align:center}
  .dnrow .dnaddr{height:38px;box-sizing:border-box;padding:0 10px;
         border:1px solid var(--c-line);border-radius:10px;background:var(--c-surface);
         color:var(--c-ink);font-size:13px;width:100%;font-family:Consolas,monospace}
  .dnrow .dndel{width:40px;height:38px;min-width:40px;padding:0;border-radius:10px;
         font-size:18px;font-weight:700;line-height:1;
         border:1px solid var(--c-line);background:transparent;color:var(--c-muted);cursor:pointer}
  .dnrow .dndel:hover{border-color:var(--c-danger);color:var(--c-danger)}
  @media(max-width:640px){
    .dnrow{grid-template-columns:22px minmax(0,1fr) 40px;gap:6px}
    .dnrow .dnaddr{height:42px;padding:0 8px;font-size:13px}
    .dnrow .dndel{height:42px}
  }

  /* 配置合约入口「多签管理标题最右侧」 */
  /* 查询中心的两个模式卡 */
  .qmodes{display:flex;gap:10px;margin:12px 0 6px;flex-wrap:wrap}
  .qnote{margin:10px 0 0;font-size:12.5px;line-height:1.8;color:var(--c-muted)}
  .qnote b{color:var(--c-ink);font-weight:700}
  .qmode{flex:1 1 220px;min-width:0;cursor:pointer;font-family:inherit;text-align:left;
    display:flex;flex-direction:column;gap:3px;padding:11px 14px;border-radius:5px;
    border:1px solid var(--c-line);background:var(--c-surface);transition:border-color .15s,transform .15s}
  .qmode b{font-size:14px;font-weight:700;color:var(--c-ink)}
  .qmode span{font-size:12px;color:var(--c-muted);line-height:1.5}
  .qmode:hover{border-color:var(--c-accent)}
  .qmode-on{border-color:var(--c-btn);background:var(--c-btn)}
  .qmode-on b{color:var(--c-btn-ink)}
  .qmode-on span{color:var(--c-btn-ink);opacity:.72}
  .cfgbtn{display:inline-flex;align-items:center;gap:6px;margin-left:0;flex:none;
    border:1px solid var(--c-line);background:var(--c-surface);color:var(--c-ink2);
    font-family:inherit;font-size:12.5px;font-weight:600;padding:8px 14px;border-radius:5px;cursor:pointer}
  .cfgbtn:hover{border-color:var(--c-accent);color:var(--c-accent)}
  .cfgbtn svg{width:15px;height:15px;flex:none}
  @media(max-width:640px){
    .cfgbtn{padding:8px 10px;font-size:12px}
    .cfgbtn span{display:none}   /* 手机端只留图标，省宽度 */
  }

  /* 执行成功 / 失败 结果卡片 */
  #disSignMask .execok{margin-top:14px;border:1px solid var(--c-ok);background:var(--c-ok-bg);
    border-radius:5px;padding:14px 16px}
  #disSignMask .execok-t{font-size:15px;font-weight:700;color:var(--c-ok)}
  #disSignMask .execok-s{font-size:12.5px;color:var(--c-ink2);margin-top:3px}
  #disSignMask .execok-row{display:flex;gap:10px;margin-top:8px;font-size:12.5px;align-items:baseline}
  #disSignMask .execok-row .k{color:var(--c-muted);flex:none;width:64px}
  #disSignMask .execok-row .v{color:var(--c-ink);word-break:break-all;min-width:0}
  #disSignMask .execok-row .v.mono{font-family:Consolas,monospace;font-size:11.5px}
  #disSignMask .execok-row a{color:var(--c-accent);text-decoration:underline;text-underline-offset:2px}
  #disSignMask .execok-link{display:inline-block;border:1px solid var(--c-ok);color:var(--c-ok);
    font-size:12.5px;font-weight:600;padding:7px 14px;border-radius:5px;text-decoration:none}
  #disSignMask .execok-link:hover{background:var(--c-ok);color:#fff}
  #disSignMask .execfail{margin-top:14px;border:1px solid var(--c-danger);background:var(--c-danger-bg);
    border-radius:5px;padding:12px 14px;font-size:12.5px;color:var(--c-danger);line-height:1.7}

  /* ===== 签名与执行弹窗 ===== */
  #disSignMask .sbox{width:100%;max-width:560px;max-height:calc(100% - 32px);
    display:flex;flex-direction:column;background:var(--c-surface);
    border:1px solid var(--c-line);border-radius:5px;overflow:hidden;
    box-shadow:0 24px 60px rgba(0,0,0,.28)}
  #disSignMask .shead{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;
    padding:16px 18px 12px;border-bottom:1px solid var(--c-line2)}
  #disSignMask .skick{font-size:10.5px;letter-spacing:1.8px;color:var(--c-muted)}
  #disSignMask .stitle{display:flex;align-items:center;gap:8px;font-size:16px;font-weight:700;
    color:var(--c-ink);margin-top:3px}
  #disSignMask .sbadge{font-size:12px;font-weight:700;padding:2px 9px;border-radius:5px;
    background:var(--c-soft);color:var(--c-ink2)}
  #disSignMask .sx{border:0;background:transparent;font-size:19px;line-height:1;
    color:var(--c-muted);cursor:pointer;padding:2px 6px;border-radius:5px}
  #disSignMask .sx:hover{color:var(--c-danger);background:var(--c-danger-bg)}
  #disSignMask .sbody{padding:14px 18px 18px;overflow:auto;min-height:0}
  /* 待签哈希：纯文字展示「可长按选中复制」，不用输入框 */
  #disSignMask .hashline{margin-bottom:12px}
  #disSignMask .hl-k{font-size:11.5px;color:var(--c-muted);margin-bottom:5px}
  #disSignMask .hl-v{font-family:Consolas,Menlo,monospace;font-size:11.5px;line-height:1.65;
    color:var(--c-ink);word-break:break-all;background:var(--c-soft);
    border:1px solid var(--c-line2);border-radius:5px;padding:9px 11px;
    -webkit-user-select:all;user-select:all;cursor:text}
  /* 实时签名计数：每收到一个签名立刻刷新「大字号，避免用户以为「没反应」」 */
  #disSignMask #disQrLive{font-size:13.5px;font-weight:700;text-align:center;
    margin:0 0 7px;color:var(--c-ink2);line-height:1.5}
  #disSignMask #disQrLive .n{font-size:19px;color:var(--c-ok);font-weight:800;padding:0 2px}
  #disSignMask #disQrLive.hit{color:var(--c-ok)}
  #disSignMask #disQrState{font-size:12px;line-height:1.65;text-align:center;
    color:var(--c-ink2);margin:0 0 8px;min-height:16px;word-break:break-word}
  /* OW 格子：≤5 个平铺一行；>5 个每行 5 个自动换行「手机端一致」 */
  #disSignMask #disQrOwStrip{display:none;gap:6px;margin:10px 0 8px}
  #disSignMask #disQrOwStrip.show{display:grid}
  #disSignMask #disQrOwStrip .owtile{min-width:0;text-align:center;
    background:var(--c-ink);border:1px solid var(--c-line);border-radius:5px;
    padding:7px 3px;color:var(--c-bg);font-size:12px;font-weight:700;line-height:1.35;
    overflow:hidden;text-overflow:ellipsis}
  #disSignMask #disQrOwStrip .owtile .sub{font-size:10.5px;font-weight:400;
    color:var(--c-muted2);white-space:nowrap}
  #disSignMask #disQrOwStrip .owtile.done{background:var(--c-ok);border-color:var(--c-ok);color:#fff}
  #disSignMask #disQrOwStrip .owtile.done .sub{color:rgba(255,255,255,.85)}
  @media(max-width:640px){
    #disSignMask .sbox{max-width:100%}
    #disSignMask .sbody{padding:12px 14px 16px}
  }

  /* ===== 签名与执行「照搬 XOL」 ===== */
  #disSignMask .qrpanel{margin-top:14px;border:1px solid var(--c-line2);border-radius:5px;padding:12px}
  #disSignMask .execcard{margin-top:16px;border-top:1px solid var(--c-line2);padding-top:14px}
  #disSignMask .execcard h3{margin:0 0 10px;font-size:14px;font-weight:600}

  /* ===== 合约调用「照搬 XOL：目标 + 函数一行两列，参数自动生成」 ===== */
  .callrow{display:flex;gap:10px;align-items:flex-end}
  .callrow .grow{flex:1 1 0;min-width:0}
  .calldesc{margin-top:10px;padding:9px 11px;border-radius:5px;background:var(--c-soft);
            border:1px solid var(--c-line2);font-size:12.5px;line-height:1.65;color:var(--c-ink3)}
  .calldesc:empty{display:none}
  #callParams .field{margin-top:10px}
  @media(max-width:640px){
    .callrow{flex-direction:column;align-items:stretch;gap:8px}
  }
  /* 接线状态：键左值右 */
  /* ===== 全局一致性「电脑 + 手机都管住」：输入框一律拉满所在容器、按钮最小宽度统一 ===== */
  #dashPage select, #dashPage input { max-width: 100% !important; }
  #compPage input { width: 100% !important; max-width: 100% !important; min-width: 0 !important; }
  #dashPage .btn, #compPage .btn { min-width: 200px; }
  /* ===== 手机端：多签管理按钮全部整齐排列「放在本样式表末尾，确保优先级」 ===== */
  @media (max-width: 640px) {
    #disPage .card2 { padding: 12px; }
    #disPage .field input, #disPage .field textarea, #disPage .field select { max-width: 100%; }
    /* 子页签 / Owner 子页签：一行并排「3 个或 4 个」，等宽整齐 */
    #disPage .mode-tabs { display: flex; flex-wrap: nowrap; gap: 6px; }
    #disPage .mode-tab { flex: 1 1 0; min-width: 0; width: auto; padding: 8px 2px; font-size: 11.5px; line-height: 1.35; text-align: center; -webkit-touch-callout: none; user-select: none; }
    /* 步骤条：3 列网格 */
    /* 按钮行：横向排列「并排 2 个等宽按钮；单个按钮整行；说明文字整行」 */
    #disPage .row2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; }
    #disPage .row2 > * { width: 100% !important; box-sizing: border-box; }
    #disPage .row2 .hint { grid-column: 1 / -1; }
    #disPage .row2 .btn { padding: 11px 10px !important; font-size: 13.5px !important; text-align: center; }
    #disPage .row2 .btn:only-of-type { grid-column: 1 / -1; }
    #disPage .row3 { gap: 6px; }
    #disPage .row3 > .btn { padding: 11px 2px !important; font-size: 11.5px !important; }
  }
  /* 三个按钮并排一行「PC / 手机都是 3 列，不换行」 */
  /* 单点按钮「打开分流 / 停止分流 / 转补偿基金」：统一绿底 #2e6b46 + 白字「2026-10-20 业务方指定」 */
  #disPage .btn.spt{background:#2e6b46;border:1px solid #2e6b46;
    color:#fff;font-weight:700;padding:11px 6px !important;font-size:13px !important;
    border-radius:5px;cursor:pointer;white-space:nowrap;text-align:center}
  #disPage .btn.spt:hover{background:#357a51;border-color:#357a51;color:#fff;filter:none}
  #disPage .btn.spt:active{transform:translateY(1px)}
  html.dark #disPage .btn.spt{background:#2e6b46;border-color:#2e6b46;color:#fff}
  html.dark #disPage .btn.spt:hover{background:#357a51;border-color:#357a51;color:#fff}
  #disPage .row3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
  #disPage .row3 > .btn { width: 100%; min-width: 0; padding: 10px 4px !important;
    font-size: 12.5px !important; text-align: center; white-space: nowrap; }
  /* ===== 电脑端：按钮统一宽度、等距整齐排列「两个断点都管住」 ===== */
  @media (min-width: 641px) {
    #disPage .mode-tabs { display: flex; flex-wrap: nowrap; }
    #disPage .mode-tab { flex: 1 1 0; min-width: 0; text-align: center; padding: 9px 10px; white-space: nowrap; }
    #disPage .row2 .btn { padding: 10px 18px !important; font-size: 13px !important; min-width: 132px; text-align: center; }
  }
